andinhtien
Senior Member
Theo e thấy thì cả bác Frog và các bác kia đều có ý đúng, nhưng em bổ sung thêm 1 góc nhìn support cho việc dùng repository pattern khi dự án dùng ORM là layer Repository mang lại lợi ích trong việc đóng vai trò là 1 layer bọc bussinesslogic.
HIểu đơn giản là ORM bọc technical, còn Repo bọc nghiệp vụ. Rõ ràng nếu là 1 SA hay dev bác không muốn đem cục này ở khắp nơi
Chưa kể việc mock _dbContext để unitest cũng có cả tỷ vấn đề khi mock các dbset và return iqueryable<>, trong khi cái em cần ở unit test là test business logic, em chỉ cần mock result cho repository là được.
CHung quy lại thì pattern nào cũng có ưu nhược điểm và luôn phải trade-off thôi. Không có đúng sai mà chỉ có phù hợp hay không thôi.
HIểu đơn giản là ORM bọc technical, còn Repo bọc nghiệp vụ. Rõ ràng nếu là 1 SA hay dev bác không muốn đem cục này ở khắp nơi
1 cái expose Iqueryable<> còn 1 cái expose business intent. Với 1 dự án chỉ crud vài chục bảng thì không sao nhưng nếu dự án có nghiệp vụ phức tạp chút theo em là khác biệt rõ ràng đấy._dbContext.Invoices
.Where(x => x.TaxEntityId == taxEntityId
&& x.Status != 1
&& x.IssueDate >= from
&& x.IssueDate <= to);
Thay vì chỉ cần
invoiceRepository.GetInvoicesInPeriod();
Chưa kể việc mock _dbContext để unitest cũng có cả tỷ vấn đề khi mock các dbset và return iqueryable<>, trong khi cái em cần ở unit test là test business logic, em chỉ cần mock result cho repository là được.
CHung quy lại thì pattern nào cũng có ưu nhược điểm và luôn phải trade-off thôi. Không có đúng sai mà chỉ có phù hợp hay không thôi.
Sửa lần cuối:


