Tôi có một số mã trong đó một mô hình thừa kế tốt đã xuống dốc và tôi đang cố gắng để hiểu tại sao và làm thế nào để sửa nó. Về cơ bản, hãy tưởng tượng bạn có một hệ thống phân cấp Zoo:
class Animal
class Parrot : Animal
class Elephant : Animal
class Cow : Animal
Vân vân.
Bạn có các phương thức eat (), run (), v.v. và tất cả đều tốt. Rồi một ngày nọ có người đến và nói - lớp CageBuilder của chúng tôi hoạt động rất tốt và sử dụng động vật. weight () và Animal.height (), ngoại trừ Bison châu Phi mới quá mạnh và có thể phá vỡ bức tường, vì vậy tôi sẽ thêm vào thêm một thuộc tính cho lớp Animal - isAfricanBizon () và sử dụng nó khi chọn vật liệu và chỉ ghi đè lên nó cho lớp AfricanBizon. Người tiếp theo đến và làm một cái gì đó tương tự và điều tiếp theo bạn biết bạn có tất cả các thuộc tính này cụ thể cho một số tập hợp con của hệ thống phân cấp vào lớp cơ sở.
Cách tốt để cải thiện / cấu trúc lại mã như vậy là gì? Một cách khác ở đây sẽ là chỉ sử dụng Dynamic_casts để kiểm tra các loại nhưng điều đó làm tắc nghẽn người gọi và thêm một loạt các if-then-other ở khắp mọi nơi. Bạn có thể có các giao diện cụ thể hơn ở đây nhưng nếu tất cả những gì bạn có là tham chiếu lớp cơ sở cũng không giúp được gì nhiều. Bất cứ một đề nghị nào khác? Ví dụ?
Cảm ơn!