Phân tách giao diện
Bài học 25 trên 28 trong khóa học Clean Code: viết code tốt hơn với Python của Coddy.
"Nhiều giao diện dành riêng cho từng ứng dụng sẽ tốt hơn một giao diện đa năng."
Giao diện mô tả những hành vi mà một đối tượng có thể thực hiện.
Nguyên tắc phân tách giao diện (interface segregation) nêu rằng giao diện nên có phạm vi gắn kết nhỏ nhất có thể. Nói cách khác, giao diện chỉ nên làm MỘT việc.
Hãy xem một ví dụ chưa tốt rồi cùng sửa nhé,
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def walk(self):
pass
@abstractmethod
def swim(self):
passGiao diện này có nhiều trách nhiệm!
Và chúng ta sẽ gặp vấn đề khi triển khai giao diện này,
class Frog(Animal):
def walk(self):
print("Walking")
def swim(self):
print("Swimming")
class Giraffe(Animal):
def walk(self):
print("Walking")
def swim(self):
raise Exception("Girrafe cannot swim!")Như bạn thấy, giao diện này không phù hợp với những loài vật không thể vừa đi bộ vừa bơi!
Thử thách
DễHãy sửa ví dụ trên bằng cách triển khai các lớp Walkable và Swimable. Bạn đã được cung cấp các lớp Frog và Giraffe, những lớp triển khai các lớp mới.
Nhiệm vụ:
- Tạo lớp trừu tượng
Walkablechỉ có một hàm trừu tượng làwalk(self) - Tạo lớp trừu tượng
Swimablechỉ có một hàm trừu tượng làswim(self)
Đừng thay đổi code đã cho!
Lưu ý rằng giờ đây mỗi giao diện chỉ có một trách nhiệm và tuân theo nguyên tắc
Tự làm thử
from abc import ABC, abstractmethod
# Enter you code here
class Frog(Walkable, Swimable):
def walk(self):
print("Walking")
def swim(self):
print("Swimming")
class Giraffe(Walkable):
def walk(self):
print("Walking")
if __name__ == "__main__":
animal_type = input()
if animal_type == "frog":
animal = Frog()
animal.walk()
animal.swim()
elif animal_type == "giraffe":
animal = Giraffe()
animal.walk()
print("not Swimming")
Tất cả bài học trong Clean Code: viết code tốt hơn với Python
6SOLID
Giới thiệuTrách nhiệm đơn nhấtMở rộng, đóng sửa đổiThay thế LiskovPhân tách giao diệnĐảo ngược phụ thuộcTự luyện tập: Trình biên dịch Python online