Tôi thực sự thích các khái niệm trong video Nguyên tắc kiến trúc sạch của chú Bob Martin. Nhưng tôi cảm thấy như mẫu này giống như sự kết hợp của các mẫu Tóm tắt Factory và Builder ở cốt lõi của nó.
Thậm chí không gần gũi.
Khi bạn nhìn vào điều này:
Bạn đang xem thiết kế của một đồ thị đối tượng. Điều này chỉ ra những gì biết về những gì. Điều còn thiếu trong câu chuyện này là cách đồ thị đối tượng được xây dựng. Xin lỗi nhưng bạn sẽ không tìm thấy ở đây. Không có bất kỳ đề cập đến xây dựng.
Bạn có thể xây dựng tất cả điều này mà không cần các nhà máy và nhà xây dựng trừu tượng. Tôi biết vì tôi đã làm nó . Tôi thậm chí không đặt ra để tránh chúng. Tôi yêu họ. Tôi chỉ không cần chúng. Tôi chỉ sử dụng tham khảo đi qua. Dependency Injection là thuật ngữ ưa thích cho điều đó.
Trong thực tế, tôi có thể xây dựng mọi thứ bạn thấy trong sơ đồ đó trong chính. Sau đó, chỉ cần gọi một phương thức trên một đối tượng để bắt đầu đánh dấu toàn bộ.
Bây giờ mọi thứ phải tồn tại trước khi bạn có thể đẩy chúng vào những thứ khác. Tôi đã khám phá điều đó ở đây và đưa ra sơ đồ nhỏ dễ thương này:
Và bạn có thể xây dựng tất cả những thứ đó mà không cần rời đi main()
.
Tôi sẽ khuyên bạn nên sử dụng các nhà xây dựng và nhà máy khi bạn muốn chia một đống mã xây dựng theo thủ tục thành các khối khái niệm có kích thước cắn đẹp. Nhưng không có gì trong kiến trúc sạch hoặc bất kỳ kiến trúc từ thông dụng nào khác đòi hỏi bạn phải làm. Vì vậy, nếu bạn muốn gắn bó với main()
, tốt. Xin vui lòng, xin thương xót .
Có phải Kiến trúc sạch sẽ của Martin Martin là một quy tắc chung cho tất cả các kiến trúc hay nó chỉ là một trong những lựa chọn?
Tôi coi Kiến trúc sạch là một từ thông dụng được sử dụng để hướng mọi người đến một blog và một cuốn sách. Blog và cuốn sách đó có những giải thích rất hay về Kiến trúc cũ rất giống nhau với những cái tên cũ hơn được sử dụng để hướng mọi người đến blog cũ và sách cũ hơn. Cụ thể là Hành cũng như Cổng và Bộ điều hợp. Không ai trong số đó là lựa chọn kiến trúc duy nhất bạn có.
Tôi thích chú Bob vì ông là một diễn giả và tác giả tuyệt vời. Anh ấy khiến tôi nghĩ về những thứ tôi sẽ không có. Nhưng nếu bạn để điều đó biến bạn thành một người nhiệt thành tôn giáo, người khăng khăng đòi mọi thứ phải được thực hiện theo cách của mình, bạn sẽ nhanh chóng thấy rằng việc cập nhật tài liệu là gần nhất tôi sẽ cho phép bạn nhận được mã của tôi.
Các kiến trúc từ thông dụng rất hữu ích khi bạn có mã tồn tại lâu cần tồn tại trong khi thế giới thay đổi xung quanh nó. Đó là khi nó tỏa sáng. Nếu thế giới ổn định so với mã, thì bạn đang làm cho mọi thứ trở nên lạ mắt mà không có lý do chính đáng.
Không có vấn đề gì tuyệt vời như thế nào có một bối cảnh bạn có thể đặt nó vào đó sẽ làm cho nó vô lý. Xin lỗi, đây cũng không phải là viên đạn bạc.
Nhưng trong video tôi cảm thấy anh ấy gợi ý rằng kiến trúc sạch sẽ có ranh giới rõ ràng giữa logic kinh doanh và khung. Các khung (web, android, v.v.) phải là các plugin cắm vào logic nghiệp vụ. Anh ấy thậm chí còn tinh tế chế giễu đường ray trong video.
Bạn đúng. Anh ấy làm. Chú Bob cảm thấy rằng các khung có thể được đối xử như các thư viện. Và họ có thể. Nhưng ngay cả quyết định đó cũng khiến bạn phải trả giá.
Những gì ông Martin đang cố gắng bảo tồn là một không gian nơi ngôn ngữ mục đích chung của bạn vẫn còn chung chung. Bạn từ bỏ điều đó khi bạn trải một khuôn khổ ở khắp mọi nơi. Khi bạn làm điều đó, bạn đang đi xuống con đường biến ngôn ngữ của bạn thành một thứ gọi là ngôn ngữ cụ thể của miền. HTML là một ngôn ngữ cụ thể miền. Nó hoạt động rất tốt nhưng có những công việc khác không thể làm được.
Miễn là nhu cầu của bạn được dự đoán bởi khuôn khổ, mọi thứ sẽ diễn ra rất suôn sẻ. Thật tốt khi có nhu cầu của bạn dự đoán. Nó đặt bạn trong một hộp giữ mọi thứ đơn giản. Chỉ cần hiểu những gì bạn đang từ bỏ để có được điều này. Nếu bạn truyền bá Spring ở mọi nơi, bạn không thể quảng cáo nó như một công việc Java nữa. Đó là một công việc Java / Spring. Tôi có thể nói điều tương tự về Ruby và Rails nhưng Rails đã ăn bữa trưa của Ruby từ lâu.