Pepe.The.Frog
Senior Member
Như tít. Theo tôi nó chẳng lợi lộc gì cả. Đẽ ra cho rách việc thêm. Thế mà đi dự án nào cũng thấy ng ta setup cái này.
Update từ #10:
Các anh đưa lý lẽ cho việc đổi databases để dùng Repository Pattern tôi càng thấy bullshit vì:
1. Bản thân ORM framework đã support rất nhiều loại database rồi.
2. Việc đổi database qua cái mới hoàn toàn mà ORM ko support như từ MSSQL sang MongoDB là cái chuyện trong thực tiễn rất hiếm xảy ra.
Chẳng có thằng điên nào đi đòi đổi db từ relation db sang Nosql chỉ bằng config cả.
Còn cái tào lao của thằng Repository Pattern mà dự án nào xài nó tôi cũng gặp là:
1. Code lặp lại những gì ORM đã làm như get, getall, save, update, delete… include.. join…
2. Khi gọi join giữa 2 repositories, hoặc cần quản lý transaction thì lại đi code lặp lại của thằng ORM. (Bullshit)
3. Toàn bộ những gì ORM support thì bị cái anh Repository Pattern này abstract lên hết nên nếu muốn xài thì phải code lặp lại, gọi lại của ORM (như vậy lại vô tình phụ thuộc vào chính ORM đó, ko còn abstract như ý tưởng ban đầu, bullshit lần 2)
Update:
Để tránh mọi sự hiểu lầm tôi đang nói cụ thể cách Implement Repository Pattern sử dụng Generic Repository như trong link này là bullshit khi đã có ORM:
https://docs.microsoft.com/en-us/as...f-work-patterns-in-an-asp-net-mvc-application
Theo cách dùng Generic Repository như này thì mổi repo tương ứng 1-1 với Entity. Lúc này nó implement ngu là ko có abstract ra IQueryable nên ko join/query đươc. Và quan trọng là useless vì đã có Ef rồi.
Còn anh nào implement Repository xem như Data Access Class trong mô hình 3 layers cổ điển thì tôi ko tranh cãi vì bản chất 2 design support 2 chuyện khác nhau:
1. Generic Repository là để abstract luôn cả cách query/update data cho từng entity type /table riêng lẽ. (việc mà ngày xưa chưa có ORM mới phải làm).
2. Data Access Class (trong 3 layers) là để gom các query logic, business rules. Dự án anh nào lớn thì xài 3 layers, dự án nào nhỏ thì xài 2 layers nhưng điểm chung là đều sử dụng ORM như dbContext, Hibernate session. Nhiều anh sử dụng tên DAL class là Repository luôn nên dễ hiểu lầm với cái implement Generic Repository kia.
https://www.thereformedprogrammer.net/is-the-repository-pattern-useful-with-entity-framework-core/
Update từ #10:
Các anh đưa lý lẽ cho việc đổi databases để dùng Repository Pattern tôi càng thấy bullshit vì:
1. Bản thân ORM framework đã support rất nhiều loại database rồi.
2. Việc đổi database qua cái mới hoàn toàn mà ORM ko support như từ MSSQL sang MongoDB là cái chuyện trong thực tiễn rất hiếm xảy ra.
Chẳng có thằng điên nào đi đòi đổi db từ relation db sang Nosql chỉ bằng config cả.
Còn cái tào lao của thằng Repository Pattern mà dự án nào xài nó tôi cũng gặp là:
1. Code lặp lại những gì ORM đã làm như get, getall, save, update, delete… include.. join…
2. Khi gọi join giữa 2 repositories, hoặc cần quản lý transaction thì lại đi code lặp lại của thằng ORM. (Bullshit)
3. Toàn bộ những gì ORM support thì bị cái anh Repository Pattern này abstract lên hết nên nếu muốn xài thì phải code lặp lại, gọi lại của ORM (như vậy lại vô tình phụ thuộc vào chính ORM đó, ko còn abstract như ý tưởng ban đầu, bullshit lần 2)
Update:
Để tránh mọi sự hiểu lầm tôi đang nói cụ thể cách Implement Repository Pattern sử dụng Generic Repository như trong link này là bullshit khi đã có ORM:
https://docs.microsoft.com/en-us/as...f-work-patterns-in-an-asp-net-mvc-application
Theo cách dùng Generic Repository như này thì mổi repo tương ứng 1-1 với Entity. Lúc này nó implement ngu là ko có abstract ra IQueryable nên ko join/query đươc. Và quan trọng là useless vì đã có Ef rồi.
Còn anh nào implement Repository xem như Data Access Class trong mô hình 3 layers cổ điển thì tôi ko tranh cãi vì bản chất 2 design support 2 chuyện khác nhau:
1. Generic Repository là để abstract luôn cả cách query/update data cho từng entity type /table riêng lẽ. (việc mà ngày xưa chưa có ORM mới phải làm).
2. Data Access Class (trong 3 layers) là để gom các query logic, business rules. Dự án anh nào lớn thì xài 3 layers, dự án nào nhỏ thì xài 2 layers nhưng điểm chung là đều sử dụng ORM như dbContext, Hibernate session. Nhiều anh sử dụng tên DAL class là Repository luôn nên dễ hiểu lầm với cái implement Generic Repository kia.
https://www.thereformedprogrammer.net/is-the-repository-pattern-useful-with-entity-framework-core/
Last edited: