UNIT OF WORK LÀ GÌ

     

Repository là một trong những mẫu dùng để tạo ra một tấm abstraction trung gian thân lớp data và lớp business. Lớp này chứa đựng phương thức thao tác mà để tiếp xúc với lớp data để ship hàng cho business tự lớp logic. Mục đích tạo ra lớp này để giải pháp ly với việc tiếp cận data làm thế nào để cho những chuyển đổi không tác động trực tiếp đi học logic business.

Bạn đang xem: Unit of work là gì

Bạn sẽ xem : Unit of work là gì

Bạn sẽ xem: Unit of work là gì

Ví dụ : công tác POS được thực thi tới những cửa hàng khác nhau. Một vài người sử dụng muốn sử dụng Microsoft SQL server và một vài khác hy vọng Oracle hoặc hầu như database khác. Trách nhiệm của Repository là phân tách bóc các lớp với thêm một tấm tiếp cận data mới

Unit of work là một trong mẫu cách xử trí transaction trong khi làm việc dữ liệu thực hiện mẫu Repository.

*


Mục lục


I / ORM và EF là gì

1. ORM : Object-relational mapping là 1 trong những kỹ thuật lập trình để quy đổi tài liệu trong số những loại không phù hợp đến ngôn ngữ lập trình hướng đối tượng người tiêu dùng người dùng. Họ hoàn toàn hoàn toàn có thể giải quyết và cách xử lý objects / models như những đối tượng người cần sử dụng trong database. Chúng ta hoàn toàn hoàn toàn có thể viết code / query bên trên Mã Sản Phẩm đối tượng người dùng để lấy tài liệu .

II/ Advantages of ORM

Thao tác dữ liệu (CRUD) được giải pháp xử lý mà ko viết SQL queriesMap tài liệu giữa result set và entity là công dụng chính của ORMSử Dụng UoW/Context để xử trí transaction trong suốt quá trình thao tác dữ liệu.Viết model trong một vị trí riêng đến việc cai quản model vào database.Nó phù hợp với giải pháp code tự nhiên với ngôn từ của chương trình.Lập trình có thể lập trình hướng đối tượng người dùng hoàn toàn khi thực hiện bất kỳ hành hễ nào với lớp business và data.

III/ Entity framework

Thao tác tài liệu ( CRUD ) được giải quyết và xử lý và xử lý mà không viết SQL queriesMap tài liệu giữa result set cùng entity là tác dụng chính của ORMSử Dụng UoW / Context để giải quyết và xử lý và xử lý transaction nhìn trong suốt quy trình thao tác dữ liệu. Viết model trong một khu vực riêng cho vấn đề quản trị model trong database. Nó tương xứng với phương pháp code tự nhiên với ngữ điệu của chương trình. Lập trình trả toàn rất có thể lập trình hướng đối tượng người tiêu dùng người cần sử dụng trọn vẹn lúc triển khai bất kỳ hành vi làm sao với lớp business và data .Map cùng với những đối tượng người dùng người dùng database. Framework này góp viết POCO và tạo ra database cùng nó cũng hoàn toàn hoàn toàn có thể tạo ra model từ database sinh tồn .Bạn hoàn toàn rất có thể viết hầu như lớp repository khác nhau cho từng entity. Mà lại so với hành vi của database một vài phương pháp chung sẽ được sử dụng mang lại hành vi CRUD. Cho nên việc sử dụng dẫu vậy repository không giống nhau sẽ tạo nên code dư thừa. Đó là lý do nên dùng một repository chung .

IV/ Thực hiện

1/ chế tạo ra chương trình giaimaivang.vn MVC website application

*

2/ kế tiếp thêm một project không giống cho câu hỏi tiếp cận dữ liệu tên là giaimaivang.vnsitory.

Xem thêm: Cách Chuyển Tiếng Anh Sang Tiếng Việt Trên Facebook, Hướng Dẫn Thay Đổi Ngôn Ngữ Facebook

*

*

4/ quay trở lại code với thêm giaimaivang.vn Entity Data model vào giaimaivang.vnsitory và update database

*

Edmx trông như sau:

*
Quan ngay cạnh những đối tượng người tiêu dùng người cần sử dụng trên mỗi đối tượng người tiêu dùng người tiêu dùng đều được tạo nên với những đối tượng người tiêu dùng đối sánh tương quan mà được call là phần nhiều thuộc tính Navigation. Bây giờ thêm một tham chiếu cho Contact. Repository đến web project là bạn hoàn toàn có thể mở màn tăng trưởng. Nhưng dự tính là tạo thành một lớp Repository qua model entity nhằm tiếp cận database từ bỏ project website hoặc từ lớp business. Ví dụ này không tồn tại lớp business như thế nào nhưng là 1 trong thực hành thực tế xuất sắc để chia ra từ lớp business .

a/ Thêm lớp sau đây cho giaimaivang.vnsitory.

*

b/ The Base Repository class triển khai interface với định nghĩa những phương thức thao tác làm việc dữ liệu.

public class BaseRepository : IBaseRepository where T : class private readonly IUnitOfWork _unitOfWork ; internal DbSet dbSet ; public BaseRepository ( IUnitOfWork unitOfWork ) if ( unitOfWork = = null ) throw new ArgumentNullException ( ” unitOfWork ” ) ; _unitOfWork = unitOfWork ; this. DbSet = _unitOfWork. Db. Set ( ) ; / / / / / / Returns the object with the primary key specifies or throws / / / / / / The type to maps the result to lớn / / / The primary key / / / The result mapped lớn the specified type public T Single ( object primaryKey ) var dbResult = dbSet. Find ( primaryKey ) ; return dbResult ; public T SingleOrDefault ( object primaryKey ) var dbResult = dbSet. Find ( primaryKey ) ; return dbResult ; public bool Exists ( object primaryKey ) return dbSet. Find ( primaryKey ) = = null ? false : true ; public virtual int Insert ( T entity ) dynamic obj = dbSet. Add ( entity ) ; this. _unitOfWork. Db. SaveChanges ( ) ; return obj. Id ; public virtual void Update ( T entity ) dbSet. Attach ( entity ) ; _unitOfWork. Db. Entry ( entity ). State = EntityState. Modified ; this. _unitOfWork. Db. SaveChanges ( ) ; public int Delete ( T entity ) if ( _unitOfWork. Db. Entry ( entity ). State = = EntityState. Detached ) dbSet. Attach ( entity ) ; dynamic obj = dbSet. Remove ( entity ) ; this. _unitOfWork. Db. SaveChanges ( ) ; return obj. Id ; public IUnitOfWork UnitOfWork get return _unitOfWork ; internal DbContext Database get return _unitOfWork. Db ; public Dictionary GetAuditNames ( dynamic dynamicObject ) throw new NotImplementedException ( ) ; public IEnumerable GetAll ( ) return dbSet. AsEnumerable ( ). ToList ( ) ; } trong lớp này IUnitOfWork interface là thực hiện để duy trì transaction trong những khi thêm mới hoặc update tài liệu .IUnitOfWork chứa 2 phương pháp, Commit ( ) và StartTransaction ( ), cơ mà sẽ tiến hành bởi lớp UnitOfWork. Lớp này chịu nhiệm vụ và nhiệm vụ cho trưng bày DbContext hoặc Transaction để mở màn và triển khai transaction .Dùng lớp BaseRepository bạn sẽ thao tác cùng với Contact, Address Mã Sản Phẩm. Trong EF, các bạn có những model tương trường đoản cú với những mã sản phẩm là các bảng vào database .

Bây giờ các bạn sẽ tạo ra 2 lớp repository nhưng thừa kế lớp BaseRepository. Minh dụ của lớp repository này sẽ giao tiếp giữa lớp database và lớp business.

Xem thêm: Kỳ Thi Thpt Quốc Gia Tiếng Anh Là Gì ? Tốt Nghiệp Tiếng Anh Là Gì

a/ ContactRepository

public class ContactRepository: BaseRepository public ContactRepository(IUnitOfWork unit):base(unit) b/ AddressRepository

public class AddressRepository : BaseRepository public AddressRepository(IUnitOfWork unit) : base(unit) c/ Lớp controller để call lớp repository theo phong cách sau:“`Languagepublic class ContactController : Controller private IUnitOfWork uow = null; private ContactRepository repo = null; public ContactController() uow = new UnitOfWork(); repo = new ContactRepository(uow); // // GET: /Default1/ public ActionResult Index() var contacts = giaimaivang.vnll(); return View(contacts.ToList()); // // GET: /Default1/Details/5 public ActionResult Details(int id = 0) tương tác contact = giaimaivang.vnleOrDefault(id); if (contact == null) return HttpNotFound(); return View(contact); // // GET: /Default1/Create public ActionResult Create() return View(); // // POST: /Default1/Create public ActionResult Create(Contact contact) if (ModelState.IsValid) giaimaivang.vnrt(contact); return RedirectToAction(“Index”); return View(contact); // // GET: /Default1/Edit/5 public ActionResult Edit(int id = 0) tương tác contact = giaimaivang.vnleOrDefault(id); if (contact == null) return HttpNotFound(); return View(contact); // // POST: /Default1/Edit/5 public ActionResult Edit(Contact contact) if (ModelState.IsValid) giaimaivang.vnte(contact); return RedirectToAction(“Index”); return View(contact); // // GET: /Default1/Delete/5 public ActionResult Delete(int id = 0) liên hệ contact = giaimaivang.vnleOrDefault(id); if (contact == null) return HttpNotFound(); return View(contact); // // POST: /Default1/Delete/5 public ActionResult DeleteConfirmed(int id) liên hệ contact = giaimaivang.vnleOrDefault(id); giaimaivang.vnte(contact); return RedirectToAction(“Index”); protected override void Dispose(bool disposing) giaimaivang.vnose(); giaimaivang.vnose(disposing);

V/ Kết Luận

Sử dụng mẫu mã Repository để phân chia lớp data tự lớp logical. Nếu phong cách xây dựng chương trình muốn biến hóa hệ thống lưu nó thì ko phải lo lắng về business logic. Qua việc tiến hành mâux Repository là 1 tiếp cận tốt để gây ra chương trình của chúng ta tuy gồm chậm rộng chút đối với việc áp dụng trực tiếp đến data.