2012-07-23 21 views
6

Tôi không sử dụng bất kỳ ORM nào. Vì vậy, tôi đang có một cuộc tranh luận cho dù phương pháp "Lưu" thực sự thuộc về một thực thể miền kinh doanh hay nên được tóm tắt trong một số dịch vụ sẽ được bàn giao Business Domain Entity để tiết kiệm?Phương thức "Lưu" thuộc về Pháp nhân miền doanh nghiệp không?

ví dụ:

class Employee 
{ 
    string Name; 
    DateTime Birth; 

    GetAge() 
    { 

    } 

    Save() 
    { 
    }   

} 

HOẶC

class Employee 
{ 
    string Name; 
    DateTime Birth; 

    GetAge() 
    { 

    } 


} 

SomePersistenceService 
{ 
    Save(Employee emp) 
     { 
     } 
} 

Trả lời

2

Kể từ khi câu hỏi này được gắn thẻ với 'miền-driven-thiết kế', bạn sẽ cần một kho lưu trữ để làm điều đó cho bạn.


Chỉ cần đổi tên SomePersistenceService thành EmployeeRepository. Vì vậy, bạn đã đi đúng hướng với tùy chọn thứ hai của mình. "trừu tượng trong một số dịch vụ mà sẽ được bàn giao cho các Doanh Nghiệp Miền Entity" được gọi kho trong phạm vi điều khiển thiết kế

Một kho là một cách để giả vờ rằng kho dữ liệu của bạn là một bộ sưu tập. Vì vậy, nó có các phương pháp như AddRemove thay vì SaveDelete.

+0

@@ Jeroen, tôi sẽ đánh giá cao nếu có thể hiển thị ví dụ bằng cách sửa đổi ví dụ của tôi. – devanalyst

3

Không có giải pháp tốt nhất, vấn đề bạn đã nêu là sự lựa chọn giữa các mẫu bản ghi Lưu trữ và Hoạt động.

Nói chung, Kho lưu trữ phù hợp hơn với kiểm tra đơn vị, vì giao diện Repository dễ dàng giả lập, cũng có thể sử dụng mô hình Repository sử dụng nguyên tắc Độ kết dính cao và Trách nhiệm đơn (có vẻ lạ từ quan điểm của OOP rằng thực thể kinh doanh của bạn sẽ chứa mã tự lưu vào cơ sở dữ liệu, tự chuyển qua mạng hoặc xuất sang một số XML, v.v.)

Active Record có thể cung cấp tốc độ phát triển RAD và một số công cụ như Spring Roo được thiết kế đầu tiên chỉ hỗ trợ Active Record, Repository hỗ trợ chỉ được thêm vào gần đây, như tôi biết. AFAIK Ruby On Rails sử dụng bản ghi Hoạt động và một số công cụ tuyệt vời khác nữa. Đối với Thiết kế Driven Miền, bạn nên sử dụng Repository như Jeroen được đề xuất, vì Repository là một mẫu DDD cơ bản (nó là phiên bản trung tâm của mẫu DAO), nhưng bạn nên kiểm tra xem các công cụ của bạn có hỗ trợ trực tiếp hay không mẫu.