Tôi tò mò những hạn chế của việc sử dụng mẫu ActiveRecord cho các đối tượng truy cập / kinh doanh dữ liệu. Điều duy nhất tôi có thể nghĩ ra khỏi đỉnh đầu là nó vi phạm Nguyên tắc Trách nhiệm duy nhất, nhưng mẫu AR đủ phổ biến để lý do này không có vẻ "đủ tốt" để biện minh cho việc không sử dụng nó (tất nhiên là của tôi Chế độ xem có thể bị sai lệch vì thường không có mã nào tôi làm việc tuân theo bất kỳ nguyên tắc RẮN nào).
Cá nhân tôi không phải là fan hâm mộ của ActiveRecord (ngoại trừ việc viết ứng dụng Ruby on Rails, trong đó AR cảm thấy "tự nhiên") vì cảm giác như lớp học đang hoạt động quá nhiều và truy cập dữ liệu không nên tự đến lớp giải quyết. Tôi thích sử dụng các kho lưu trữ trả về các đối tượng kinh doanh. Hầu hết các mã tôi làm việc với xu hướng sử dụng một biến thể của ActiveRecord, ở dạng (Tôi không biết tại sao phương thức này là một boolean):
public class Foo
{
// properties...
public Foo(int fooID)
{
this.fooID = fooID;
}
public bool Load()
{
// DB stuff here...
// map DataReader to properties...
bool returnCode = false;
if (dr.HasRows)
returnCode = true;
return returnCode;
}
}
hoặc đôi khi là cách "truyền thống" hơn để có một public static Foo FindFooByID(int fooID)
phương pháp cho người tìm và một cái gì đó dọc theo dòng public void Save()
để lưu / cập nhật.
Tôi nhận được rằng ActiveRecord là thường đơn giản hơn nhiều để thực hiện và sử dụng, nhưng nó có vẻ hơi quá đơn giản cho các ứng dụng phức tạp và bạn có thể có một kiến trúc mạnh mẽ hơn bằng cách đóng gói logic truy cập dữ liệu của bạn trong một Repository (chưa kể đến việc nó dễ dàng hơn để trao đổi trên chiến lược truy cập dữ liệu, ví dụ có thể bạn sử dụng Procs + DataSets được lưu trữ và muốn chuyển sang LINQ hoặc một cái gì đó)
Vì vậy, những hạn chế khác đối với mô hình này cần được xem xét khi quyết định xem ActiveRecord có phải là ứng cử viên tốt nhất cho công việc không?