Lúc đầu, tôi chỉ xác định sự khác biệt giữa hai, Thừa kế là mối quan hệ "là-a" và Thành phần là mối quan hệ "có-a".
1) Trong thừa kế con rối là thừa kế đơn có nghĩa là, chúng tôi không thể lấy được từ nhiều hơn một lớp. Thừa kế là tốt trong con rối, nhưng chúng ta nên biết nơi nó được áp dụng.Ví dụ, docs Múa rối phần [ "Ngoài: Khi nào thì Inherit" tại liên kết này https://docs.puppetlabs.com/puppet/latest/reference/lang_classes.html#aside-when-to-inherit], Họ thực sự đặt tên chính xác hai tình huống mà thừa kế nên xảy ra:
- khi bạn muốn ghi đè lên một tham số của một tài nguyên quy định tại lớp mẹ
- khi bạn muốn kế thừa từ một lớp các thông số cho tham số tiêu chuẩn đánh giá cao
Nhưng xin lưu ý một số điều quan trọng ở đây:
2) Mặt khác, thành phần là kỹ thuật thiết kế để thực hiện mối quan hệ có. mà chúng tôi có thể thực hiện bằng cách sử dụng bao gồm từ khóa bù nhìn và cũng có thể, với lớp {'baseclass':}, sau đó, nếu bạn muốn sử dụng thông số.
(Xin lưu ý: Trong con rối, chúng ta có thể sử dụng "bao gồm" nhiều lần nhưng không phải là "lớp học" cú pháp, như con rối sẽ phàn nàn với các định nghĩa lớp trùng lặp)
Vì vậy, đó là (hoặc thừa kế hoặc bố cục) tốt hơn để sử dụng trong Puppet: Nó phụ thuộc vào ngữ cảnh tôi muốn nói, mã con rối bạn đang viết vào lúc này và hiểu được những hạn chế của sự thừa kế con rối và khi nào sử dụng bố cục.
Vì vậy, tôi sẽ cố gắng giữ tất cả điều này trong vài điểm:
1) Lúc đầu, con rối sử dụng mô hình thừa kế duy nhất.
2) Trong con rối, sự đồng thuận chung quanh thừa kế là để chỉ sử dụng nó khi bạn cần phải kế thừa giá trị mặc định từ cơ sở/Phụ huynh
3) Tuy nhiên, nhìn vào vấn đề này, nơi bạn muốn kế thừa giá trị mặc định từ cha mẹ:
class apache {
}
class tomcat inherits apache {
}
class mysql inherits tomcat {
}
class commerceServer inherits mysql {
}
Thoạt nhìn, điều này có vẻ hợp lý nhưng lưu ý rằng mô-đun MySQL hiện đang kế thừa các giá trị mặc định và tài nguyên từ lớp tomcat. Điều này không chỉ làm cho không có ý nghĩa như các dịch vụ này là không liên quan, nó cũng cung cấp một cơ hội cho những sai lầm để kết thúc trong các biểu hiện rối của bạn.
4) Vì vậy, cách tiếp cận tốt hơn là chỉ cần thực hiện bao gồm trên mỗi lớp (ý tôi là thành phần) bạn muốn sử dụng, vì điều này loại bỏ mọi vấn đề phạm vi của bản chất này.
Kết luận: Chúng tôi có thể thử và đơn giản hóa các biểu hiện rối bằng cách sử dụng thừa kế, điều này có thể là đủ, nhưng nó chỉ có thể làm việc đến một điểm.Nếu môi trường của bạn phát triển lên hàng trăm hoặc thậm chí hàng nghìn máy chủ, chiếm hơn 20 hoặc 30 loại máy chủ khác nhau, một số có thuộc tính được chia sẻ và sự khác biệt tinh tế, trải rộng trên nhiều môi trường, bạn có thể sẽ gặp phải một trang web lộn xộn không thể quản lý mô-đun được kế thừa. Tại thời điểm này, sự lựa chọn hiển nhiên là thành phần.
Go qua những liên kết này, nó giúp chúng ta hiểu phần bù nhìn và kế thừa một cách tốt (cá nhân họ đã giúp tôi):
- Thiết kế Múa rối - Đó là thực sự tốt, http://www.craigdunn.org/2012/05/239/
- link Wiki: http://en.wikipedia.org/wiki/Composition_over_inheritance
- Modeling Lớp phần với lớp parametrized: https://puppetlabs.com/blog/modeling-class-composition-with-parameterized-classes
tôi cơ bản là một lập trình viên, cá nhân một người ủng hộ mạnh mẽ của Inversion of Control/Dependency Injection, đó là khái niệm/mẫu có thể có thể thông qua thành phần.