Cách nó đã được
Trong nhiều năm, tôi đã tổ chức các giải pháp phần mềm của mình như sau:
- Lớp truy cập dữ liệu (DAL) để trừu tượng hóa việc truy cập dữ liệu
- Lớp logic nghiệp vụ (BLL) để áp dụng quy tắc kinh doanh cho các tập dữ liệu, xử lý xác thực, v.v.
- Tiện ích (Util) vốn chỉ là một thư viện các phương thức tiện ích phổ biến mà tôi đã xây dựng theo thời gian.
- Lớp trình bày tất nhiên có thể là web, máy tính để bàn, thiết bị di động, bất cứ điều gì.
Hiện tại là như vậy
Trong khoảng bốn năm qua, tôi đã sử dụng Khung thực thể của Microsoft (tôi chủ yếu là một nhà phát triển .NET) và tôi thấy rằng việc DAL đang trở nên cồng kềnh hơn là vì thực tế là Khung thực thể đã thực hiện công việc mà DAL của tôi đã từng làm: nó trừu tượng hóa việc kinh doanh chạy CRUD dựa trên cơ sở dữ liệu.
Vì vậy, tôi thường kết thúc với một DAL có một tập hợp các phương thức như thế này:
public static IQueryable<SomeObject> GetObjects(){
var db = new myDatabaseContext();
return db.SomeObjectTable;
}
Sau đó, trong BLL, phương thức này được sử dụng như sau:
public static List<SomeObject> GetMyObjects(int myId){
return DAL.GetObjects.Where(ob => op.accountId == myId).ToList();
}
Đây là một ví dụ đơn giản vì BLL thường sẽ áp dụng nhiều dòng logic hơn, nhưng có vẻ hơi quá khi duy trì DAL cho phạm vi hạn chế như vậy.
Sẽ không tốt hơn nếu chỉ từ bỏ DAL và chỉ cần viết các phương thức BLL của tôi như vậy:
public static List<SomeObject> GetMyObjects(int myId){
var db = new myDatabaseContext();
return db.SomeObjectTable.Where(ob => op.accountId == myId).ToList();
}
Tôi đang xem xét bỏ DAL khỏi các dự án trong tương lai vì những lý do đã nêu ở trên, nhưng trước khi thực hiện, tôi muốn thăm dò ý kiến cộng đồng ở đây để nhận thức / tầm nhìn xa / ý kiến của bạn trước khi tôi xuống đường trong một dự án và phát hiện ra một vấn đề tôi đã làm ' t dự đoán.
Bất kỳ suy nghĩ đều được đánh giá cao.
Cập nhật
Sự đồng thuận dường như là một DAL riêng biệt là không cần thiết nhưng (tự suy luận ở đây) là một ý tưởng tốt để tránh khóa nhà cung cấp. Ví dụ: nếu tôi có một DAL đang trừu tượng hóa các cuộc gọi EF như minh họa ở trên, nếu tôi bao giờ chuyển sang một số nhà cung cấp khác tôi không cần phải viết lại BLL của tôi. Chỉ những truy vấn cơ bản trong DAL mới cần được viết lại. Phải nói rằng, tôi thấy khó khăn khi hình dung một kịch bản trong đó điều này sẽ xảy ra. Tôi đã có thể tạo một mô hình EF của Oracle db, MSSQL là một mô hình nhất định, tôi khá chắc chắn rằng MySql cũng có thể (??) vì vậy tôi không chắc liệu mã bổ sung có bao giờ cấp ROI đáng giá hay không.
GetMyObjects(int myId)
dễ dàng hơn so với chế độ nhạo báng / giả mạo / giả mạo GetObjects.Where(ob => op.accountId == myId).ToList()
.