2013-01-24 31 views
5

Tôi bắt đầu một dự án và đang vật lộn với kiến ​​trúc cho lớp truy cập dữ liệu của chúng tôi. Về cơ bản nó sẽ cần phải giao tiếp với nhiều backends với các thiết kế cơ sở dữ liệu khác nhau.Lớp truy cập dữ liệu với nhiều backend và thiết kế cơ sở dữ liệu khác nhau

Tôi muốn có một DAL chung, sau đó thực hiện một hàm chung trong bất kỳ chương trình phụ trợ nào. Các phụ trợ có mã duy nhất để chèn, cập nhật, v.v. Vì vậy, thêm một nhân viên trong 1 phụ trợ sẽ có mã khác nhau.

Tôi đã thử mẫu Kho lưu trữ nhưng điều đó không áp dụng cho trường hợp này. Tôi đã kết thúc với một phương thức mẫu Factory, nhưng tôi sẽ kết thúc việc tạo ra một Factory cho từng đối tượng. Tôi có thể có lẽ chỉ tạo ra 1 nhà máy nhưng sau đó các đối tượng phụ trợ sẽ có hàng trăm các chức năng như "SaveEmployee", "SavePlan", vv

Ngay bây giờ tôi có như sau:

DAL 
    --> DAL.Backend1 
     --> Employee.Save(employee) 
     --> Plan.Save(plan) 
    --> DAL.Backend2 
     --> Employee.Save(employee) 
     --> Plan.Save(plan) 

Trong dự án DAL Tôi có một mẫu Nhà máy cho từng đối tượng, nhân viên, kế hoạch, để quyết định đối tượng của DAL nào sẽ trả về và thực thi.

Tôi khá chắc chắn đây không phải là kiến ​​trúc tốt nhất cho điều này, vì vậy tôi tự hỏi nếu có một mô hình tốt hơn để sử dụng để giải quyết vấn đề của tôi.

+0

Ít hoàn toàn năng động và tự động xây dựng các câu lệnh CRUD, bạn sẽ phải có chức năng cụ thể ở đâu đó. Nếu bạn không muốn nó trong cơ sở dữ liệu, thì tôi nghĩ tuyến đường bạn đã đi là tuyến đường tốt nhất. –

+0

Tôi thường có xu hướng với mẫu tổng hợp. – Malk

+1

Xác định "các thiết kế cơ sở dữ liệu khác nhau". Ý bạn là - một là SQL, một XML, một NoSql? Hay chúng ta nói về các cơ sở dữ liệu quan hệ khác nhau? – TomTom

Trả lời

0

Chúng tôi đã triển khai chức năng này trên một trong các dự án của chúng tôi. Tôi không chắc đó là giải pháp tốt nhất, nhưng cho đến nay nó vẫn hiệu quả với chúng tôi. Tuy nhiên, chúng tôi có một lớp DAO tùy chỉnh dựa trên các mẫu CodeSmith tạo ra các lớp CRUD cho chúng tôi. Về cơ bản, chúng tôi tạo ra một singleton đại diện cho một nhà môi giới kết nối cho tất cả người dùng. Khi người dùng đăng nhập, họ chọn cơ sở dữ liệu muốn kết nối (mặc dù một số lọc IP thu hẹp tùy chọn của họ, lý tưởng là 1). Đăng nhập lưu trữ một Mã thông báo kết nối với người dùng được liên kết và lớp cơ sở cho lớp DAO được tạo ra sẽ gọi cho nhà môi giới kết nối để truy xuất chuỗi kết nối thích hợp. Bằng cách đó bất cứ lúc nào một đối tượng DAO được gọi là chuỗi kết nối được thu thập trước khi đối tượng DAO cố gắng kết nối với DB.

Các vấn đề liên quan