Giả sử tôi có một đối tượng, Ô tô, và nó có tập hợp các phương thức khác nhau ...? Có thể nhận được Blob như thế nào? (như trong các antipattern, "blob") Những phương pháp này hoạt động trong bộ đủ riêng biệt và không thực sự chéo chéo chức năng.Phương pháp mới đi đâu?
Car
# methods related to suburban driving
->foo1
->foo2
# methods related city driving
->bar3
->bar4
Bây giờ, giả sử tôi muốn thêm "tắt đường lái xe" là một trong những trường hợp đối tượng xe của tôi có thể hỗ trợ. Nếu tôi thêm các phương thức vào đối tượng Ô tô, không phải là làm cho nó trở nên blob hơn?
Car (augmented)
# methods related to suburban driving
->foo1
->foo2
# methods related city driving
->bar3
->bar4
# methods related off road driving
->blah5
->blah6
Tôi có nên:
A: Subclass xe. Tôi có thể làm cho một OffRoadCar mở rộng đối tượng xe. Nhưng nếu Car và OffRoadCar chia sẻ cùng một dữ liệu/trạng thái và chỉ khác nhau theo phương pháp thì sao? OffRoadCar chỉ "hoạt động" cụ thể hơn xe hơi, nhưng không được mô tả cụ thể hơn và cũng không có trường duy nhất. Vì vậy, instantiating một OffRoadCar là vô nghĩa.
OffRoadCar extends Car
# methods related off road driving
->blah5
->blah6
B: Tiêu thụ xe bằng phương pháp tĩnh. Giống như OffRoadAdventure-> Embark (Car). Vì vậy, lớp OffRoadAdventure mất một đối tượng Ô tô và có cách của nó với nó.
Trong C#, điều này sẽ được gọi là phương pháp mở rộng.
Tôi đoán đặt một cách khác là giải pháp cho đối tượng Blob antipattern là gì? Là phân lớp? Có phương pháp mở rộng không?
Ngoài ra, một lý do khác mà tôi muốn giải quyết các phương pháp này là điều gì sẽ xảy ra nếu việc triển khai thực hiện một số chi phí, như bao gồm các gói/gói khác? Tôi sẽ không muốn người dùng của lớp cốt lõi liên tục trả tiền cho thứ mà họ sẽ không bao giờ sử dụng. Tôi hình dung chi phí cho thiểu số là đáng để tiết kiệm cho đa số. Và nó làm cho biểu đồ phụ thuộc chính xác hơn (và không giống blob).
PS - Ngôn ngữ triển khai là Perl.
Xe hơi có phải là một lớp học không? Có thể xe thực sự là một ICar (giao diện)? Tôi sẽ đề xuất một lộ trình thành phần trên thừa kế. – OnResolve
Ô tô đã là một lớp thực sự đang được sử dụng. (nó thực sự là một hiện vật ORM) –