Nơi tôi làm việc, chúng tôi đã đi qua lại về chủ đề này một số lần và đang tìm kiếm một kiểm tra sanity. Đây là câu hỏi: Các đối tượng nghiệp vụ có phải là các thùng chứa dữ liệu (giống như DTO) hay chúng cũng chứa logic có thể thực hiện một số chức năng trên đối tượng đó.Đối tượng kinh doanh - Thùng chứa hoặc chức năng?
Ví dụ - Lấy đối tượng khách hàng, nó có thể chứa một số thuộc tính chung (Tên, Id, v.v), nên đối tượng khách hàng đó cũng bao gồm các hàm (Lưu, Calc, v.v ...) không?
Một dòng lý luận cho biết tách riêng đối tượng ra khỏi chức năng (chính trách nhiệm duy nhất) và đặt chức năng trong lớp hoặc đối tượng Logic kinh doanh.
Dòng khác của lý luận nói, không, nếu tôi có đối tượng khách hàng, tôi chỉ muốn gọi Customer.Save và được thực hiện với nó. Tại sao tôi cần phải biết làm thế nào để tiết kiệm một khách hàng nếu tôi đang tiêu thụ các đối tượng?
Hai dự án cuối cùng của chúng tôi đã có các đối tượng tách biệt khỏi chức năng, nhưng cuộc tranh luận đã được nâng lên một lần nữa trên một dự án mới. Điều gì có ý nghĩa hơn?
EDIT
Những kết quả rất giống với các cuộc tranh luận của chúng tôi. Một phiếu bầu cho một bên hoặc người khác hoàn toàn thay đổi hướng. Có ai muốn thêm 2 xu của họ không?
EDIT
Cho dù việc lấy mẫu câu trả lời là nhỏ, dường như đa số tin rằng chức năng trong một đối tượng kinh doanh là chấp nhận được miễn là nó là đơn giản nhưng bền bỉ được đặt tốt nhất trong một lớp học/lớp riêng biệt. Chúng tôi sẽ cung cấp cho một thử. Cảm ơn mọi người đã nhập ...
Chỉ cần làm rõ ... suy nghĩ của bạn là tính toán và các chức năng đơn giản khác nên nằm trong đối tượng, nhưng sự kiên trì (tức là các giao dịch db) nên cư trú ở nơi khác. Tôi có đúng không? – Walter
Vâng, đó là những gì tôi đang nói. Không phải là cách duy nhất để làm điều đó, tất nhiên. Một số người thích có đối tượng vẫn tồn tại. Tôi thường không. – duffymo
Chúng tôi đã luôn thảo luận Tất cả chức năng trong đối tượng kinh doanh hoặc Không có. Đây là một thỏa hiệp tốt mà chúng tôi chưa bao giờ nghĩ tới. – Walter