21

Tôi không chắc chắn cách đặt tên lớp lưu trữ dữ liệu khi thiết kế lớp truy cập dữ liệu của chương trình (DAL).Thuật ngữ kiên trì đối tượng: 'kho' so với 'lưu trữ' so với 'ngữ cảnh' so với 'truy xuất' so với (...)

(By lưu trữ dữ liệu lớp, ý tôi là một lớp học đó là trách nhiệm để đọc một đối tượng tiếp tục tồn tại vào bộ nhớ, hoặc để tồn tại một đối tượng trong bộ nhớ.)

Có vẻ như hợp lý để đặt tên cho một lớp lưu trữ dữ liệu theo hai điều:

  • loại đối tượng mà nó xử lý;
  • cho dù tải và/hoặc vẫn tồn tại các đối tượng đó.

⇒ Một lớp có thể tải Banana đối tượng có thể được gọi là ví dụ: BananaSource.

Tôi không biết cách đi về điểm thứ hai (ví dụ: Source bit trong ví dụ). Tôi đã nhìn thấy danh từ khác nhau dường như được sử dụng để chỉ mục đích đó:

  • kho: điều này nghe rất chung chung. Điều này biểu thị một cái gì đó đọc/ghi có thể truy cập?
  • lưu trữ: điều này nghe có vẻ giống như nội dung có khả năng cho phép quyền ghi.
  • ngữ cảnh: âm thanh rất trừu tượng. Tôi đã thấy điều này với LINQ và các trình lập bản đồ quan hệ đối tượng (ORM).
    P.S. (vài tháng sau): Điều này có thể thích hợp cho các thùng chứa chứa các đối tượng "hoạt động" hoặc được giám sát khác (mô hình Đơn vị công việc xuất hiện trong đầu).
  • retriever: nghe có vẻ giống như chỉ đọc.
  • nguồn & sink: có thể không phù hợp với đối tượng bền bỉ; phù hợp hơn với luồng dữ liệu?
  • trình đọc/writer: khá rõ ràng về ý định của nó, nhưng âm thanh quá kỹ thuật đối với tôi.

Có phải những tên này tùy ý hoặc có những khác biệt được chấp nhận rộng rãi/khác biệt ngữ nghĩa đằng sau mỗi? Cụ thể hơn, tôi tự hỏi:

  • Tên nào phù hợp cho các cửa hàng dữ liệu chỉ đọc?
  • Tên nào phù hợp cho các kho dữ liệu chỉ ghi?
  • Tên nào sẽ phù hợp với hầu hết các cửa hàng dữ liệu chỉ đọc mà thỉnh thoảng được cập nhật?
  • Tên nào phù hợp cho hầu hết các cửa hàng dữ liệu chỉ ghi mà thỉnh thoảng được đọc?
  • Có một tên nào phù hợp với tất cả các trường hợp không?
+0

Câu hỏi hay, tôi đã cân nhắc điều này trong dự án hiện tại của mình. Tôi đã sử dụng 'Store' để đọc/ghi và' Dịch vụ' chỉ đọc (ví dụ: 'UserService.GetUserById (1)'). Điều duy nhất tôi không thích là để nhớ tên của một cái gì đó tôi phải biết/nhớ hành vi của nó. Nó không hoàn toàn ngồi đúng mà tôi đang sử dụng 2 danh từ khác nhau theo cách này. Quan tâm để biết nếu có một quy ước tiêu chuẩn (ish). – fearofawhackplanet

Trả lời

10

Vì chưa có ai trả lời câu hỏi, tôi sẽ đăng lên những gì tôi đã quyết định trong thời gian chờ đợi.

Chỉ để lưu nội dung trò chuyện, tôi đã quyết định gọi hầu hết các lớp lưu trữ dữ liệu kho lưu trữ. Thứ nhất, nó có vẻ là thuật ngữ trung lập, phi kỹ thuật nhất trong danh sách mà tôi đề nghị, và nó có vẻ phù hợp với Repository pattern.

Nói chung, "kho" có vẻ phù hợp tốt nơi giao diện dữ liệu thu hồi/bền bỉ là một cái gì đó tương tự như sau:

public interface IRepository<TResource, TId> 
{ 
    int Count { get; } 
    TResource GetById(TId id); 
    IEnumerable<TResource> GetManyBySomeCriteria(...); 
    TId Add(TResource resource); 
    void Remove(TId id); 
    void Remove(TResource resource); 
    ... 
} 

Một thuật ngữ tôi đã quyết định về việc sử dụng là cung cấp, mà tôi sẽ thích hơn "kho lưu trữ" bất cứ khi nào các đối tượng được tạo khi đang di chuyển thay vì được truy xuất từ ​​một cửa hàng lưu trữ lâu bền hoặc khi truy cập vào một cửa hàng bền vững diễn ra theo cách hoàn toàn chỉ đọc. (Factory cũng sẽ là thích hợp, nhưng âm thanh kỹ thuật nhiều hơn, và tôi đã quyết định chống lại thuật ngữ kỹ thuật đối với hầu hết sử dụng.)

PS: Một số thời gian đã trôi qua kể từ khi viết câu trả lời này, và tôi đã đã có một số cơ hội tại nơi làm việc để xem xét mã của người khác. Một thuật ngữ tôi đã thêm vào từ vựng của tôi là Dịch vụ, mà tôi đang đặt trước cho các tình huống SOA: Tôi có thể xuất bản FooService được hỗ trợ bởi kho lưu trữ hoặc nhà cung cấp riêng tư Foo. "Dịch vụ" về cơ bản chỉ là một lớp công khai mỏng ở trên, điều này đảm nhận những thứ như xác thực, ủy quyền hoặc tổng hợp DTO cho việc "đáp ứng" các phản hồi dịch vụ.

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