Nó có lẽ chỉ là tôi, đó là lý do tại sao tôi hỏi câu hỏi. Chuyên gia thông tin, Nói không hỏi và SRP thường được đề cập cùng nhau như các phương pháp hay nhất. Nhưng tôi nghĩ rằng họ đang ở tỷ lệ cược. Dưới đây là những gì tôi đang nói về:Chuyên gia/Thông báo không hỏi về tỷ lệ cược với Nguyên tắc chịu trách nhiệm duy nhất?
Mã mà ủng hộ SRP nhưng vi phạm Nói Do not Ask, Thông tin Expert:
Customer bob = ...;
// TransferObjectFactory has to use Customer's accessors to do its work,
// violates Tell Don't Ask
CustomerDTO dto = TransferObjectFactory.createFrom(bob);
Mã mà ủng hộ Nói Do not Ask/Thông tin Expert nhưng vi phạm SRP:
Customer bob = ...;
// Now Customer is doing more than just representing the domain concept of Customer,
// violates SRP
CustomerDTO dto = bob.toDTO();
Nếu chúng thực sự có tỷ lệ cược, đó là sự chứng minh cho OCD của tôi. Nếu không, xin vui lòng điền cho tôi về cách thức các thực hành này có thể cùng tồn tại một cách hòa bình. Cảm ơn bạn.
Edit: ai đó muốn một định nghĩa của các từ ngữ -
Thông tin chuyên gia: các đối tượng có dữ liệu cần thiết cho sự vận hành nên tổ chức các hoạt động
Nói Do not Ask: đừng hỏi các đối tượng cho dữ liệu để làm việc; nói với các đối tượng để làm công việc
đơn Trách nhiệm Nguyên tắc: từng đối tượng nên có trách nhiệm trong gang tấc định nghĩa
Một bản trình bày nhỏ về các thuật ngữ bạn đang sử dụng có thể hữu ích. – shoosh
Câu trả lời ngắn gọn là có ... câu trả lời ngắn là đôi khi mọi người (học giả) bị mắc kẹt đầu cho đến nay, họ quên rằng lập trình không phải là một khoa học hoàn hảo, chúng tôi không có một ngôn ngữ đủ sạch sẽ để đáp ứng tất cả các nguyên tắc này. Phá vỡ nguyên tắc mà nó có ý nghĩa nhất. – Stimul8d
Ví dụ thứ hai của bạn vi phạm SRP, nhưng không thực sự là một ví dụ hay về Tell Don't Ask. – koenmetsu