2012-02-15 20 views
6

Tôi đang cố gắng theo dõi DDD và tôi có một lớp Câu hỏi và một lớp Phản hồi (trong số những người khác). Tôi muốn có thể đếm số lượng câu hỏi, số phản hồi và nhiều thứ khác được coi là hoạt động meta.Lớp lưu trữ trong DDD

Các phương thức "meta" này nằm trong cùng một kho lưu trữ như các phương thức khác thuộc lớp, hoặc nên nằm trong MetaRepository. Tại đây, bạn có các phương thức meta khác nhau truy vấn cơ sở dữ liệu.)?

+2

Bản đồ nào chính xác nhất cho miền của bạn? – blueberryfields

+0

Thực ra tôi nghĩ cả hai đều ổn. Điều này vẫn còn trên bảng trắng vì vậy tôi mở cho những thay đổi :) Nếu tôi đã phải chọn mà không có ai nói cho tôi biết phải làm gì tôi sẽ đặt các phương pháp meta trong các lớp học mà họ thuộc về. – LuckyLuke

+0

Làm cả hai bản đồ đều tốt cho miền của bạn? Ví dụ: Câu hỏi/Phản hồi có thể là một phần của một số loại vùng chứa, chẳng hạn như tài liệu hoặc bảng câu hỏi. Thùng chứa có thể biết bao nhiêu nó chứa, cái gì, và có thể muốn phương pháp đếm. – blueberryfields

Trả lời

8

Không có gì trong DDD cấm có nhiều hơn một kho lưu trữ cho mỗi tổng hợp. Bạn chỉ có thể có một kho lưu trữ cho các truy vấn cơ bản và các phương thức vòng đời (IQuestionsRepository) và một kho lưu trữ riêng cho những gì bạn gọi là các mục đích 'meta' hoặc 'statistics' (IQuestionsStatistics). Điều này hoạt động rất tốt cho một tên miền lớn hơn, theo nguyên tắc một nguyên tắc trên mỗi tổng lưu trữ có thể dẫn đến 'bùng nổ phương pháp' và vi phạm SRP. Theo DDD không nên đi ngược lại các nguyên tắc cơ bản của OOP.

1

Với tôi, mỗi kho lưu trữ chịu trách nhiệm đếm các phần tử của nó, đó là một phương thức trong số getById, getAll ... (các phương thức chuẩn).

0

Những câu hỏi này ("có bao nhiêu phản hồi?") Và số lượng chúng đang đề cập đến một phần quan trọng trong miền của bạn?

Nếu có, chúng có vẻ như các truy vấn hợp lý để đưa vào kho lưu trữ của bạn. Công việc của kho lưu trữ của bạn, sau khi tất cả, là để trả lời các câu hỏi liên quan đến miền về tổng hợp nó chứa.

Nếu không, ví dụ: nếu đây chỉ là công cụ ngẫu nhiên có thể để hiển thị cho người dùng, thì những câu hỏi này có thể thuộc về một dịch vụ ứng dụng, bên ngoài lớp miền hoàn toàn.

0

tôi sẽ dính vào nhiều hơn một kho lưu trữ duy nhất cho mỗi lớp mô hình miền, hoặc sử dụng một kho lưu trữ chung

Cá nhân tôi đã không bao giờ nhìn thấy bất cứ ai tạo ra một MetaRepository với mục đích mà bạn mô tả