Kerangka Unit Kerja & Repositori | URF Resmi , Entitas yang Dapat Dilacak & Tim Pabrik Desain
URF.Core memiliki fitur yang lengkap dan sekarang memiliki paritas penuh dengan URF.NET (legacy .NET). URF.Core telah melalui penulisan ulang lengkap dengan fokus laser pada Arsitektur, Desain dan Implementasi serta penerapan permintaan teratas untuk vNext, Anda dapat melihat URF.Core.Sample kami dengan ASP.NET Core Web API, OData, dengan sampel CRUD lengkap dengan Angular dan Kendo UI.
Pada versi 3.1.1, dukungan telah ditambahkan untuk database Dokumen NoSQL dengan implementasi untuk MongoDb.
Sampel telah disediakan untuk EF Core 3.x dan MongoDb.
Tetap setia pada (warisan) URF.NET yang memiliki tapak kecil. URF.Core URF.Core ( 7 total kelas ) vs. URF.NET ( 12 total kelas ).
Kami telah membuat setiap implementasi menjadi virtual sehingga dapat diganti untuk kasus penggunaan tim/proyek/pengembang serta kasus tepi apa pun.
Seperti biasa, ini adalah debat keagamaan antara tim dan komunitas. Seperti halnya URF.NET (lama), kami memberi tim opsi untuk ikut serta dalam IQueryable atau IEnumerable, dan bahkan keduanya bergantung pada Arsitektur, Desain & Implementasi, dan gaya tim Anda. Sebagai URF.NET dan untuk tim yang merasakan Pola Repositori yang mengekspos IQueryable
sebagai abstraksi yang bocor, cukup gunakan API IQuery
URF, yang akan memberi Anda semua fitur Lancar dari IQueryable, namun akan mengembalikan Entitas murni atau IEnumerable vs. menggunakan IQueryable, sekali lagi URF .Core & URF.NET keduanya mendukung, sehingga tim memiliki kebebasan total untuk memilih mana dari 3 jalur/opsi yang paling masuk akal untuk tim/proyek mereka.
public class ProductsController : ODataController
{
private readonly IProductService _productService ;
private readonly IUnitOfWork _unitOfWork ;
public ProductsController (
IProductService productService ,
IUnitOfWork unitOfWork )
{
_productService = productService ;
_unitOfWork = unitOfWork ;
}
// e.g. GET odata/Products?$skip=2&$top=10
[ EnableQuery ]
public IQueryable < Products > Get ( ) => _productService . Queryable ( ) ;
// e.g. GET odata/Products(37)
public async Task < IActionResult > Get ( [ FromODataUri ] int key )
{
if ( ! ModelState . IsValid )
return BadRequest ( ModelState ) ;
var product = await _productService . FindAsync ( key ) ;
if ( product == null )
return NotFound ( ) ;
return Ok ( product ) ;
}
// e.g. PUT odata/Products(37)
public async Task < IActionResult > Put ( [ FromODataUri ] int key , [ FromBody ] Products products )
{
if ( ! ModelState . IsValid )
return BadRequest ( ModelState ) ;
if ( key != products . ProductId )
return BadRequest ( ) ;
_productService . Update ( products ) ;
try
{
await _unitOfWork . SaveChangesAsync ( ) ;
}
catch ( DbUpdateConcurrencyException )
{
if ( ! await _productService . ExistsAsync ( key ) )
return NotFound ( ) ;
throw ;
}
return NoContent ( ) ;
}
// e.g. PUT odata/Products
public async Task < IActionResult > Post ( [ FromBody ] Products products )
{
if ( ! ModelState . IsValid )
return BadRequest ( ModelState ) ;
_productService . Insert ( products ) ;
await _unitOfWork . SaveChangesAsync ( ) ;
return Created ( products ) ;
}
// e.g. PATCH, MERGE odata/Products(37)
[ AcceptVerbs ( " PATCH " , " MERGE " ) ]
public async Task < IActionResult > Patch ( [ FromODataUri ] int key , [ FromBody ] Delta < Products > product )
{
if ( ! ModelState . IsValid )
return BadRequest ( ModelState ) ;
var entity = await _productService . FindAsync ( key ) ;
if ( entity == null )
return NotFound ( ) ;
product . Patch ( entity ) ;
_productService . Update ( entity ) ;
try
{
await _unitOfWork . SaveChangesAsync ( ) ;
}
catch ( DbUpdateConcurrencyException )
{
if ( ! await _productService . ExistsAsync ( key ) )
return NotFound ( ) ;
throw ;
}
return Updated ( entity ) ;
}
// e.g. DELETE odata/Products(37)
public async Task < IActionResult > Delete ( [ FromODataUri ] int key )
{
if ( ! ModelState . IsValid )
return BadRequest ( ModelState ) ;
var result = await _productService . DeleteAsync ( key ) ;
if ( ! result )
return NotFound ( ) ;
await _unitOfWork . SaveChangesAsync ( ) ;
return StatusCode ( ( int ) HttpStatusCode . NoContent ) ;
}
}
URF.Core telah sepenuhnya ditulis ulang, dan semuanya sekarang sepenuhnya task
, async
, await
langsung dari kotaknya. Dengan cara ini, tim akan secara otomatis mendapatkan manajemen thread terbaik pada peningkatan kinerja asinkron.
© 2017 URF.NET Semua hak dilindungi undang-undang.