Sự khác biệt giữa mô hình thiết kế và mô hình kiến ​​trúc là gì?


119

Khi chúng tôi đọc về các mẫu thiết kế trên internet, chúng tôi lưu ý rằng có 3 loại:

  • Sáng tạo
  • Cấu trúc
  • Hành vi

Nhưng khi chúng ta tạo ra kiến ​​trúc của một phần mềm, thì chúng ta nghĩ về MVP, MVC hoặc MVVM.

Ví dụ: trong số các mẫu sáng tạo, tôi đã tìm thấy mẫu singleton , nhưng tôi cũng đã sử dụng singleton trong MPV của mình.

Vì vậy, câu hỏi của tôi là: Một mẫu thiết kế có phải là cấu trúc tổng thể của một sản phẩm không?

  • Nếu có, thì singleton có thể là một mẫu thiết kế như thế nào? Vì tôi có thể sử dụng nó ở bất cứ đâu trong ứng dụng của mình. Về cơ bản, nó bị hạn chế chỉ để tạo một phiên bản tại một thời điểm trong bộ nhớ, nhưng không phải khái niệm này định nghĩa phần mềm được thiết kế như thế nào?

  • Nếu không, thì MVP, MVC và MVVM ở đâu trong ba loại mẫu? Và sự khác biệt giữa thiết kế và kiến ​​trúc của phần mềm là gì?



2
Kiểm tra danh sách các mẫu thiết kế và các nguồn lực mô hình kiến trúc github.com/DovAmir/awesome-design-patterns
dov.amir

Câu trả lời:


174

Nó yêu cầu một lời giải thích chi tiết nhưng tôi sẽ cố gắng phác thảo sự khác biệt theo hiểu biết của mình.

Các mẫu là điểm chung được chắt lọc mà bạn tìm thấy trong các chương trình. Nó cho phép chúng tôi giải cấu trúc một cấu trúc phức tạp lớn và xây dựng bằng cách sử dụng các bộ phận đơn giản. Nó cung cấp một giải pháp chung cho một lớp vấn đề.

Một phần mềm phức tạp lớn trải qua một loạt các giải cấu trúc ở các cấp độ khác nhau. Ở cấp độ lớn, các mẫu kiến ​​trúc là công cụ. Ở cấp độ nhỏ hơn, các mẫu thiết kế là công cụ và ở cấp độ triển khai, các mô hình lập trình là công cụ.

Một mô hình có thể xảy ra ở các mức độ rất khác nhau. Xem Fractals . Sắp xếp nhanh, Sắp xếp hợp nhất là tất cả các mẫu thuật toán để tổ chức một nhóm các phần tử theo một thứ tự.

Để có một cái nhìn đơn giản nhất:

  • Mô hình lập trình - cụ thể cho ngôn ngữ lập trình
  • Mẫu thiết kế - giải quyết các vấn đề tái diễn trong xây dựng phần mềm
  • Các mẫu kiến ​​trúc - tổ chức cấu trúc cơ bản cho hệ thống phần mềm

Idioms là kỹ thuật lập trình theo mô hình cụ thể và ngôn ngữ cụ thể để điền vào các chi tiết cấp thấp.

Các mẫu thiết kế thường được kết hợp với các điểm chung cấp mã. Nó cung cấp các chương trình khác nhau để tinh chỉnh và xây dựng các hệ thống con nhỏ hơn. Nó thường bị ảnh hưởng bởi ngôn ngữ lập trình. Một số mô hình nhạt đi thành không đáng kể do mô hình ngôn ngữ . Các mẫu thiết kế là các chiến thuật quy mô trung bình giúp loại bỏ một số cấu trúc và hành vi của các thực thể và các mối quan hệ của chúng.

Trong khi các mẫu kiến ​​trúc được coi là điểm chung ở cấp độ cao hơn các mẫu thiết kế. Các mẫu kiến ​​trúc là các chiến lược cấp cao liên quan đến các thành phần quy mô lớn, các thuộc tính và cơ chế toàn cầu của một hệ thống.

Làm thế nào các mẫu thu được? Xuyên qua:

  1. tái sử dụng,
  2. phân loại
  3. và cuối cùng là sự trừu tượng để chắt lọc những điểm chung.

Nếu bạn đã làm theo những suy nghĩ được trình bày ở trên. Bạn sẽ thấy rằng Singleton là một "mẫu thiết kế" trong khi MVC là một trong những mẫu "kiến trúc" để giải quyết các mối quan tâm tách biệt.

Hãy thử đọc tiếp:

  1. http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)
  2. http://en.wikipedia.org/wiki/Design_pattern
  3. http://en.wikipedia.org/wiki/Anti-pattern

14
Được thực hiện rất tốt và công phu. Bây giờ tôi chỉ ước mọi người sẽ sử dụng các thuật ngữ phân biệt như bạn đặt chúng ở đây. Tôi có thể ghim một bản in câu trả lời của bạn ở bức tường phía trên máy pha chế cà phê của phòng tiếp thị của chúng tôi không.? Có lẽ một ngày nào đó họ sẽ hiểu. ;-)
ofi

@ofi: Cảm ơn! Việc sử dụng cấu trúc ngôn ngữ có thể khiến chúng ta hiểu lầm và hướng dẫn chúng ta. Đây là một cái gì đó tôi thấy khá mạnh mẽ.
pyfunc

+3 vì Cứu chúng tôi khỏi các câu hỏi phỏng vấn :)
RAJESH KUMAR ARUMUGAM

Câu trả lời hay, cảm ơn !! như @ofi đã nói, tôi sẽ in nó và ghim vào tường của nhóm thiết kế.
cuộn

11

Mẫu thiết kế là những mẫu nổi tiếng để giải quyết các vấn đề kỹ thuật theo cách đã được chứng minh nhiều lần. Các mẫu thiết kế là các cấu trúc và thực hành thiết kế phổ biến để tạo ra phần mềm Hướng đối tượng có thể tái sử dụng. Các ví dụ về mẫu thiết kế là Factory Pattern, Singleton, Facade, State, v.v. Các mẫu thiết kế có thể được sử dụng để giải quyết các vấn đề nhỏ hơn trong toàn bộ ứng dụng và dễ dàng hơn nhiều so với kiến ​​trúc tổng thể

các mẫu kiến ​​trúc là các mẫu nổi tiếng để giải quyết các vấn đề về kiến ​​trúc ứng dụng phần mềm. Kiến trúc ứng dụng phần mềm là quá trình xác định một giải pháp có cấu trúc đáp ứng tất cả các yêu cầu kỹ thuật và hoạt động. Kiến trúc của ứng dụng là 'tổ chức' tổng thể của mã. Ví dụ về các Kiến trúc khác nhau có thể là MVC, MVVM, MVP, n-layer (tức là UI-BLL-DAL), v.v. Kiến trúc thường cần được quyết định trước và thường rất khó thay đổi khi ứng dụng được xây dựng.


1

Các yếu tố kiến ​​trúc có xu hướng hướng tới tập hợp các lớp hoặc mô-đun, thường được biểu diễn dưới dạng hộp. Sơ đồ về kiến ​​trúc đại diện cho cấp cao nhất khi nhìn xuống, trong khi biểu đồ lớp ở cấp nguyên tử nhất. Mục đích của các mẫu kiến ​​trúc là để hiểu cách các phần chính của hệ thống ăn khớp với nhau như thế nào, thông điệp và dữ liệu lưu chuyển qua hệ thống như thế nào, và các mối quan tâm khác về cấu trúc. Các mẫu kiến ​​trúc sử dụng nhiều loại thành phần khác nhau, mỗi loại thường bao gồm các mô-đun nhỏ hơn liên tiếp. Mỗi thành phần có trách nhiệm trong kiến ​​trúc Các mẫu thiết kế là các mẫu thiết kế cấp thấp hoặc cấp độ cho các phần tử ứng dụng nhỏ hơn.

Để biết thêm thông tin: https://www.oreilly.com/ideas/contrasting-architecture-patterns-with-design-patterns


0

Chà, về phần chính, đó là vấn đề của ngôn ngữ. Theo kinh nghiệm của tôi, ranh giới giữa thiết kế và kiến ​​trúc, theo như phần mềm có liên quan, là một con sông rộng với chiều rộng của nó là do mực nước mà do đó chủ yếu bị ảnh hưởng bởi các mùa tiếp thị. Nói chung, thuật ngữ "thiết kế" được sử dụng với một khía cạnh mạnh mẽ về hành vi của sản phẩm phần mềm khi được người dùng cuối công nhận, trong khi "kiến trúc" là viết tắt của cấu trúc kỹ thuật của một phần mềm, tức là các thành phần, thư viện, giao thức và bất cứ điều gì nó cần để đáp ứng thiết kế. "Các mẫu thiết kế" có hai vai trò: Thứ nhất, chúng được coi là các phương pháp hay nhất để giải quyết một loại (nhiều hoặc ít) các vấn đề tiêu chuẩn, không phải sản phẩm; Thứ hai, họ giúp các nhà phát triển giao tiếp. Tiếp tục với ví dụ của bạn về Singleton, nó cho phép chúng tôi biết cơ chế hoạt động chỉ bằng cách sử dụng từ, thay vì giải thích mọi lúc, rằng chúng tôi đã tạo một phiên bản duy nhất bằng cách sử dụng một không gian dữ liệu được chỉ định (biến hoặc bất cứ điều gì) được đặt theo cách có kiểm soát và được đảm bảo duy nhất, bởi vì chúng tôi đã bảo vệ hàm tạo của lớp, v.v. Vì vậy, IMHO câu trả lời ngắn gọn cho câu hỏi của bạn là: Điều đó phụ thuộc vào người đang nói. Điều đó có ý nghĩa không?


0

Các Mẫu thiết kế khác với Mẫu kiến ​​trúc ở phạm vi của chúng, chúng được bản địa hóa hơn, chúng có ít tác động hơn đến cơ sở mã, chúng tác động đến một phần cụ thể của cơ sở mã, ví dụ:

How to instantiate an object when we only know what type needs to be instantiated at run time (maybe a Factory Class?)
How to make an object behave differently according to its state (maybe a state machine, or a Strategy Pattern?)

Các mẫu kiến ​​trúc có tác động sâu rộng đến cơ sở mã, thường tác động đến toàn bộ ứng dụng theo chiều ngang (tức là cách cấu trúc mã bên trong một lớp) hoặc theo chiều dọc (nghĩa là cách một yêu cầu được xử lý từ các lớp bên ngoài vào các lớp bên trong và trở lại). Ví dụ về các mẫu kiến ​​trúc: Model-View-Controller, Model-View-ViewModel

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.