وحدة العمل وإطار المستودع | URF الرسمي والكيانات التي يمكن تتبعها وفريق مصنع التصميم
اكتملت ميزة URF.Core وهي تتمتع الآن بتكافؤ كامل مع URF.NET (.NET القديم). لقد خضع URF.Core لعملية إعادة كتابة كاملة مع التركيز بالليزر على الهندسة المعمارية والتصميم والتنفيذ بالإضافة إلى تنفيذ الطلب الأعلى لـ vNext، يمكنك إلقاء نظرة على URF.Core.Sample الخاص بنا مع ASP.NET Core Web API وOData، مع عينات CRUD كاملة مع Angular وKendo UI.
اعتبارًا من الإصدار 3.1.1، تمت إضافة الدعم لقواعد بيانات مستندات NoSQL مع تطبيق MongoDb.
تم توفير عينات لـ EF Core 3.x وMongoDb.
البقاء مخلصًا لـ (تراث) URF.NET المتمثل في وجود بصمة صغيرة. URF.Core URF.Core ( إجمالي 7 فئات ) مقابل URF.NET ( إجمالي 12 فصلًا ).
لقد جعلنا كل عملية تنفيذ افتراضية وبالتالي يمكن تجاوزها لأية حالات استخدام للفرق/المشاريع/المطورين بالإضافة إلى حالات الحافة.
كما هو الحال دائمًا، هذا نقاش ديني بين الفرق وداخل المجتمع. كما هو الحال مع URF.NET (القديم)، فقد منحنا الفرق خيار الاشتراك في IQueryable أو IEnumerable، وحتى كلاهما اعتمادًا على بنية فريقك، وتصميمه، وتنفيذه، وأسلوبه. باعتبارك URF.NET وللفرق التي تشعر بأنماط المستودعات التي تكشف IQueryable
كتجريد متسرب، استخدم ببساطة واجهة برمجة تطبيقات IQuery
الخاصة بـ URF، والتي ستمنحك جميع ميزات Fluent لـ IQueryable، ومع ذلك ستعيد كيانًا خالصًا أو IEnumerable مقابل استخدام IQueryable، مرة أخرى URF يدعم كل من .Core وURF.NET، بحيث تتمتع الفرق بالحرية الكاملة لاختيار أي من المسارات/الخيارات الثلاثة الأكثر منطقية بالنسبة لهم الفريق/المشروع.
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 بالكامل، وأصبح كل شيء الآن task
async
تمامًا، await
إخراجها من الصندوق. بهذه الطريقة، ستحصل الفرق تلقائيًا على أفضل إدارة لسلاسل الرسائل من خلال تحسينات الأداء غير المتزامنة.
© 2017 URF.NET جميع الحقوق محفوظة.