2009-07-08 26 views
5

Cách tiếp cận điển hình để sử dụng mẫu kho lưu trữ với .NET 1.1 (C#) là gì?Mẫu lưu trữ với .NET 1.1

Tôi đang tìm một thứ gì đó dọc theo các dòng this Stack Overflow question, ngoại trừ trong .NET 1.1, tôi không có generics, vì vậy tôi chỉ tìm cách xem nó có thể (tôi chắc chắn nó là), và cách nó thường được thực hiện.

Trả lời

1

Rất có thể nhưng bạn không phải sử dụng giao diện chung hoặc thực hiện nhiều thao tác truyền. Sử dụng giao diện ...

public interface IRepository 
{ 
    public object Get(int id); // or object id 
    public void Save(object obj); 
} 

public class CustomerRepository : IRepository 
{ 
    public object Get(int id) { // implementation } 
    public void Save(object obj) { // implementation } 
} 

Mã hoạt động tốt nhưng gọi này phải đưa đối tượng vào đúng loại và phương pháp triển khai cụ thể phải kiểm tra loại và loại trừ ngoại lệ. Đúc trực tiếp là yêu cầu ngoại lệ thời gian chạy vì vậy tôi sẽ tránh phương pháp này.

Cách tiếp cận tôi khuyên bạn không nên để kho lưu trữ của bạn triển khai giao diện chung. Thay vào đó, họ phải thực hiện các phương thức thường được đặt tên theo quy ước.

public class CustomerRepository 
{ 
    public Customer Get(int id) { // implementation } 
    public void Save(Customer entity) { // implementation } 
} 

public class EmployeeRepository 
{ 
    public Employee Get(int id) { // implementation } 
    public void Save(Employee entity) { // implementation } 
} 

Đã chỉnh sửa để thêm: Tôi đọc lại câu trả lời được liên kết. Đoạn văn cuối cùng mất tôi nhưng tôi có thể mở rộng một chút về việc sử dụng DI. Trong hầu hết các trường hợp, sẽ không có ý nghĩa khi sử dụng DI để tiêm một kho lưu trữ "chung chung" (trong trường hợp này có nghĩa là bắt nguồn từ một giao diện chung). Ngoài các phương thức phổ biến, một kho lưu trữ sẽ có các phương thức cụ thể của thực thể như GetCustomersWithPastDueAccounts. Bạn có thể định nghĩa một ICustomerRepository với phương thức đó và yêu cầu CustomerRepository của bạn thực hiện điều đó. Sau đó, bạn có thể sử dụng tiêm phụ thuộc để tiêm CustomerRepository khi chạy. Không có gì sai với điều đó, nhưng theo kinh nghiệm của tôi, nó khá hiếm khi bạn có nhiều triển khai của một kho lưu trữ, do đó, có rất ít điểm khi làm như vậy.

+0

Nhưng với phương pháp thứ hai của bạn, tôi không bị mất khả năng tiêm phụ thuộc? –

+1

Bạn luôn có thể thực hiện việc tiêm phụ thuộc thủ công. Nhưng bạn nói đúng, bạn sẽ không thể sử dụng một khuôn khổ DI để làm tiêm phụ thuộc. Tôi sẽ chỉnh sửa câu trả lời của mình và thêm giải thích thêm. –

+0

Về cơ bản, có một giao diện cho mỗi kho lưu trữ và có thể được sử dụng cho DI. Đối với 10 thực thể, 10 giao diện, với ít nhất 10 cài đặt. Âm thanh phải không? –

0

trừ khi tôi đọc sai nội dung nào đó, câu trả lời được chấp nhận trong câu hỏi bạn đã liên kết không sử dụng Generics. Ông định nghĩa một Giao diện và sử dụng thuật ngữ "chung chung" để có nghĩa là Giao diện không được gắn trực tiếp với bất kỳ bảng cụ thể nào trong mô hình.

+0

Tôi không nghĩ đó là trường hợp, nhưng nếu có, chữ ký của 7 chức năng đó trong IEntityRepository sẽ như thế nào? –

+1

Ông đang đề cập đến việc triển khai kho lưu trữ sử dụng giao diện IR22ository . –

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