những điều sau đây có thể chấp nhận được không?
class Person {
Person (IStorageService) {} ...
trống Save() {} ...
}
sự phụ thuộc này không có ý nghĩa.
Trong khi nó không mạnh mẽ vài một Person
-Storage
, bởi vì nó không ràng buộc chúng vào một cụ thực hiện lưu trữ, tôi cho rằng bất kỳ sự phụ thuộc như vậy làm cho không có ý nghĩa.
Các phương pháp như động từ
Hãy suy nghĩ về phương pháp trên một lớp học như động từ đó sẽ được thực hiện bởi loại đó. Bạn đang nói một trường hợp của loại đó để "làm một cái gì đó", đối với tên miền địa phương của nó.
Điều gì có nghĩa là khi tôi, với tư cách là một người, Save
?
- Tôi đã chuyển nhà cung cấp bảo hiểm và giảm chi phí lên đến 15%?
- Tôi là một vị thần cứu chuộc?
- Tôi đã tải xuống linh hồn của mình thành một automaton?
Dịch vụ lưu trữ có thể và nên Save
. Mọi người không thể Save
và không được quảng cáo rằng họ có thể.
Đang cố gắng để giày sừng nó trong
SaveTo
có thể làm cho ý nghĩa hơn - ví dụ: public void SaveTo(IStorageService storage)
.
Nhưng sau đó bạn đang nói một người có trách nhiệm biết cách lưu chính nó vào bộ nhớ. Theo tôi, đây là a violation of SRP. Nó cũng hiển thị a missing piece of Domain Analysis.
Tên miền cho Person
sẽ không chứa bất kỳ nội dung nào về lưu, lưu trữ, v.v. Nó sẽ chứa tương tác giữa mọi người và những thứ khác ở cấp đó của miền. Miền tồn tại của dữ liệu là một nơi tốt hơn cho phương thức Save
.
Nếu Person
nằm trong miền sự cố (ở mức trừu tượng đó), thì Storage
nằm trong miền giải pháp.
Làm thế nào bạn nên tách logic của bạn
Bạn có ba mảnh của logic ở đây:
Person
- biết về "người thứ"
Storage
- biết về loại đặc biệt dung lượng lưu trữ và cách truy cập vào số điện thoại
Storage of Person
- biết về cách một người nên cam kết lưu trữ
Làm theo lời khuyên của tôi ở trên, tôi muốn để lại Person
để tự mình thực hiện. Tuy nhiên, bạn có thể tách logic cho Storage
và Storage of Person
hoặc bạn có thể kết hợp chúng.
The approach that ORMs take là phân tách tất cả ba khái niệm. "Ánh xạ" trong "Ánh xạ quan hệ đối tượng" là nơi "Bộ nhớ của người" được đóng gói.
Phương pháp này cho phép logic Storage
tập trung vào công việc có khả năng đọc cấu hình bộ nhớ, kết nối với bộ nhớ, đảm bảo lưu trữ nhanh, chọn phương pháp lưu trữ thay thế, v.v. mã lưu trữ có thể được sử dụng lại bởi bất kỳ mô hình tên miền nào khác.
Tôi thường thấy sau. Lợi thế của cái cũ là gì? – phoog
Tôi nghĩ rằng lớp người không có kinh doanh thực sự biết về các storageservice, nó cặp vợ chồng người lớp để một dịch vụ lưu trữ mà làm cho nó ít tái sử dụng – Daniel