Khớp nối, đơn giản hóa
Khi một đối tượng gọi một phương thức, thuộc tính, v.v. của một đối tượng khác, chúng ta nói các đối tượng được ghép nối. Chúng tôi gọi nó là khớp nối vì bây giờ callee không thể thay đổi bất cứ điều gì về phương thức / prop riêng của nó. w.out phá vỡ người gọi .
Vì vậy, càng nhiều khớp nối - phương pháp, đạo cụ. - càng khó thay đổi mã callee mà không phá vỡ tất cả các mã sử dụng nó.
chiêm nghiệm khớp nối
- Tham khảo ngay cả một prop., Phương thức kết hợp hai đối tượng.
- Rõ ràng khớp nối là cần thiết để tạo ra phần mềm.
- Với tính chất 'bước khóa' của khớp nối, chúng tôi muốn giới hạn và cô lập nó. Mục tiêu này chỉ đơn giản là đi cùng với nhà phát triển phần mềm nói chung. Nguyên tắc.
- Càng ít đối tượng chúng ta phải nói chuyện, khớp nối càng thấp.
- Nếu tôi cần thực hiện, giả sử, 20 phương thức gọi khác nhau thì khớp nối thấp hơn nếu tất cả 20 cuộc gọi đến một lớp / đối tượng, ngược lại các phương thức tương tự đó trải đều trên một số lớp / đối tượng.
Hầu hết các kiến thức gây ra sự ghép đôi điên rồ
Ở đây chúng tôi có một Employee
cái có Person
'Địa chỉ'
public class Employee {
public Person me = new Person();
}
public class Person {
public Address home = new Address();
}
public class Address {
public string street;
}
Để có được đường phố tôi phải gọi : myEmployee.me.home.street
. Điều này trái ngược 180 độ so với nguyên tắc ít kiến thức nhất. Tôi phải biết gì về thiết kế, cấu trúc composite, của Employee
, Person
và Address
các lớp học.
Thiết kế lớp bị lỗi này buộc tôi phải biết về tất cả các lớp đó và do đó kết hợp myEmployee.me.home.street
tôi (đối tượng người gọi) với không dưới 3 lớp - chỉ nhận được một thuộc tính duy nhất!
Kiến thức ít nhất tiết kiệm trong ngày
Nếu tôi chỉ nói chuyện với Employee
lớp tôi đang áp dụng nguyên tắc ít kiến thức nhất, và bằng cách đó, chúng tôi sẽ tự động giới hạn khớp nối với chỉ lớp đó, đồng thời cách ly khớp nối với một lớp đó.
Bằng cách thêm tất cả các thuộc tính cần thiết trong Employee
lớp, chúng tôi sửa lỗi khớp nối.
do đó
public class Employee {
public Person me = new Person();
public string street { return me.home.street; }
}
Cho phép tôi gọi: myEmployee.street
-
- Tôi chỉ "biết"
Employee
- Tôi được ghép nối với chỉ
Employee
- cho dù cấu trúc của nó phức tạp như thế nào.
Kiến thức kém nhất
Chúng tôi đã tách myEmployee khỏi Person
và Address
, và lý tưởng nhất là chúng tôi nên tiếp tục áp dụng kiến thức ít nhất bằng cách thêm thông qua các thuộc tính sao cho Employee
chỉ nói chuyện Person
và Person
chỉ nói chuyện vớiAddress