Đôi khi sử dụng mixin với nhiều lần kế thừa có thể giúp chúng tôi cải thiện khả năng sử dụng lại mã của chúng tôi.Việc lạm dụng mixin là điều ác và các giải pháp thay thế là gì?
Ví dụ, việc thiết kế sau
class FollowableMixin(object):
def get_followers(self):
...
...
class User(FollowableMixin):
...
có thể được tái sử dụng tốt hơn so với chỉ đơn giản là thêm get_followers
để User
:
class User(object):
def get_followers(self):
...
...
vì sau đó chúng ta có thể xem xét hỗ trợ các đơn vị followable khác mà khách hàng tiềm năng của get_followers
:
class BookStore(FollowableMixin):
...
Tuy nhiên, nếu mẫu này bị lạm dụng, mã có thể quá phức tạp.
class User(FollowableMixin, RunnableMixin, FlyableMixin, WhatMixin ...):
...
Với tất cả các lớp mixin này tiêm thuộc tính và phương thức vào lớp, bạn sẽ rất khó hiểu mã của mình. Ví dụ: bạn không biết phương thức bạn đang gọi đến từ đâu và phương pháp này lần lượt có thể bao gồm lời gọi phương thức trong một mixin khác ...
Tôi nên làm gì để đơn giản hóa chương trình này?
Tôi không chắc chắn những gì "bị lạm dụng" có nghĩa là trong ngữ cảnh này. Nếu 'FollowableMixin' thích hợp với lớp' User', và 'RunnableMixin' là thích hợp, và ..., tuy nhiên, cần nhiều mixin, đó là số lượng bạn sử dụng. Bạn có thể gặp phải các xung đột về tên, nhưng đó chỉ là nếu bạn bất cẩn khi đặt tên cho các phương thức của mình. –