2010-04-24 26 views
15

Sự khác biệt giữa mô-đun so với thiết kế thành phần là gì?Mô-đun so với thiết kế thành phần

Cảm ơn

+0

Điều này phụ thuộc vào ngôn ngữ/môi trường bạn đang nói đến (ví dụ: .Net mô-đun là một cái gì đó hoàn toàn khác với một mô-đun perl). Bạn quan tâm đến điều gì? – Foxfire

+0

Ngữ cảnh duy nhất tôi có thể nghĩ về điều đó sẽ có ý nghĩa cho câu hỏi này là Joomla !, nhưng cho đến khi chúng tôi nhận được một số làm rõ, tôi sẽ không bận tâm trả lời. – cHao

+0

về khuôn khổ. Bạn có thể cho tôi ví dụ về khung công tác PHP là mô-đun so với thành phần không? – ms80

Trả lời

10

Tôi muốn chia sẻ ý tưởng về sự khác biệt này.

Cả thành phần và mô-đun được sử dụng để chỉ một nhóm chức năng hoặc một phần của hàm. Module là hợp lý hơn, ví dụ: module Tài chính, module HR, module Manufacturing ... trong hệ thống ERP. Mặt khác, thành phần là vật lý hơn. Trong phần mềm, nó có thể là một dll, ocx, exe, ...

Không có tiêu chí để đo lường cái nào lớn hơn cái kia. Một thành phần có thể chứa danh sách các mô-đun và một mô-đun cũng có thể chứa nhiều thành phần. Các thành phần được sử dụng để mô hình hóa hệ thống trong chế độ xem kỹ thuật và mô-đun được sử dụng để mô hình hóa hệ thống trong chế độ xem chức năng (chức năng của hệ thống)

+1

Điều này chắc chắn là một câu trả lời sai. Trích dẫn từ https://support.microsoft.com/en-us/kb/815065: "Việc sử dụng các tệp DLL giúp thúc đẩy mô đun hóa mã, tái sử dụng mã, [...]" - bạn không thể nói "thành phần là vật lý hơn" , DLL là tất cả về mô đun và bạn không thể nhận được nhiều vật lý hơn thế. – arpadf

+0

Tương tự đối với các gói OSGI https://www.osgi.org/developer/architecture/: "Vì vậy, tính mô đun là cốt lõi của các thông số OSGi và được thể hiện trong gói bundleconcept. Trong thuật ngữ Java, một gói là một tệp JAR cũ thuần túy "- một lần nữa các mô-đun là vật lý. – arpadf

8

Có một tham chiếu trong OSGi trong hành động mà tôi tin rằng đã giải thích sự khác biệt rất tốt .

Mô-đun so với các thành phần Có vẻ như mô-đun và thành phần có nhiều điểm chung không? Cả hai đều cung cấp các công cụ cho nhau và tiêu thụ nội dung từ nhau. Chúng cũng được đóng gói như các đơn vị triển khai độc lập. Hai người này có thể được coi là một và cùng một số hoặc ít nhất được kết hợp không? Có, chúng có thể, nhưng các thành phần và mô-đun phục vụ các mục đích khác nhau và có phần trực giao (chúng không hoàn toàn trực giao, vì các thành phần được tạo từ mã có thể được đóng gói thành các mô-đun). Mô-đun đối phó với việc đóng gói mã và sự phụ thuộc giữa các mã. Các thành phần giải quyết việc triển khai chức năng cấp cao hơn và các phụ thuộc trong số các thành phần. Các thành phần cần quản lý mã phụ thuộc của chúng, nhưng chúng về mặt kỹ thuật không cần hệ thống mô-đun để làm điều đó (thường là chúng ta lập trình làm việc đó qua đường dẫn lớp). Một bản tóm tắt tốt là bạn có thể nghĩ về các mô-đun như giao dịch với mã tĩnh và các phụ thuộc thời gian biên dịch, trong khi các thành phần đối phó với các cá thể và các phụ thuộc thực thi .

+0

Đồng ý; Tôi chỉ muốn củng cố quan điểm này. Chìa khóa để hiểu sự khác biệt giữa các mô-đun và các thành phần là cách chúng ta xem hệ thống: một khung nhìn tĩnh nơi các mô-đun và các phụ thuộc giữa chúng được dẫn xuất trực tiếp từ mã và khung nhìn thể hiện nơi các thành phần và các phụ thuộc/liên kết giữa chúng kết quả của việc xử lý thời gian chạy và/hoặc một bước cấu hình thực thi riêng biệt. – arpadf

5

Nếu bạn có nghĩa là mô-đun theo nghĩa của mô đun có một định nghĩa trong IEEE Chuẩn Chú giải thuật Công Nghệ Phần Mềm ngữ:

"Mô đun là mức độ mà một hệ thống hay máy tính chương trình bao gồm các thành phần rời rạc sao cho thay đổi thành một thành phần có tác động tối thiểu lên các thành phần khác. "

Dr. Bertrand Meyer tuyên bố năm tiêu chí cho mô đun:

  • Decomposability của vấn đề thành các vấn đề
  • composability các module để tạo ra hệ thống mới
  • dễ hiểu của một module trong sự cô lập
  • Liên tục - những thay đổi nhỏ đã ảnh hưởng cục bộ
  • Bảo vệ - cách ly lỗi
+4

Nếu bạn định trích dẫn nguồn chính thức, tốt nhất là bạn nên trích dẫn ngay: 'Mức độ mà hệ thống hoặc chương trình máy tính bao gồm các thành phần rời rạc sao cho thay đổi thành một thành phần có tác động tối thiểu đến các thành phần khác ' – Gerrat

5

Thành phần và mô-đun thường quá nhầm lẫn với nhau.Tuy nhiên, chúng , không giống nhau, và hàm ý của một, không nhất thiết phải giữ cho người kia.

Modularity là phân đoạn mã thành các mô-đun có liên quan chức năng . Trong nhiều ngôn ngữ lập trình, một mô-đun chỉ đơn giản là một tệp nguồn . Thông thường, nếu tệp nguồn phát triển quá lớn, bạn có thể chia thành hai hoặc nhiều tệp nguồn và đặt này vào một thư mục mới; trong khi một thư mục thường không được gọi là một mô-đun, loại phân hủy này vẫn là mô-đun.

Một thành phần, mặt khác, có thể được sáng tác theo nhiều cách khác nhau với các thành phần khác để tạo các chương trình khác nhau. Đó là, có một giai đoạn thành phần riêng biệt , nơi những người thực sự quyết định thành phần nào nên được sử dụng cùng nhau.

Tôi đã thấy thiết kế thành phần được sử dụng để thực thi một số khái niệm về mô đun cứng . Cách tiếp cận này không thể được khuyến nghị vì có thêm chi phí đáng kể của bố cục: độ phức tạp của thành phần phát triển đa thức với số lượng thành phần. Và số lượng các thành phần tăng tuyến tính với số lượng nhóm chức năng, vì một khi bạn bắt đầu với mô đun theo thành phần phân hủy, bạn buộc phải tạo thành phần mới bất cứ khi nào bạn sẽ chỉ cần một mô-đun mới. mô-đun nếu không sẽ không thực sự thuộc về bất kỳ đâu. Tại 100 thành phần, chi phí thành phần trở thành công việc toàn thời gian và mỗi thành phần lặp lại sẽ mất đến vài tuần, mặc dù có nhiều nỗ lực tự động hóa . Điều này cản trở đáng kể sự phát triển.

Đề xuất đơn giản nhất của tôi là tránh xa các thành phần nếu ở tất cả có thể; biết rõ rằng các thành phần đôi khi có thể là một điều cần thiết. Ví dụ: nếu nhiều tổ chức độc lập tham gia vào dự án , một thành phần cho mỗi tổ chức có vẻ được chấp nhận.

Đó là một vấn đề về hương vị, làm thế nào tốt hạt phân hủy của bạn thành mô-đun nên được, mặc dù tất cả mọi người đồng ý rằng mô đun là một điều tốt .

Nếu tôi biết tên của hàm, trình chỉnh sửa của tôi sẽ tìm thấy nó đủ sớm. Mặt khác, nếu vì một lý do nào đó tôi không biết tên của hàm (hoặc một lớp cho vấn đề đó), mô đun trở nên quan trọng hơn .

tôi mong chờ các trường hợp sau, chỉ là một vấn đề cho các chức năng mà bạn có thể trải nghiệm từ việc sử dụng chương trình, vì vậy hãy thử để làm cho phân hủy của chương trình của bạn thành các module phản ánh một phân hủy trực quan về hành vi của bạn chương trình vào các khu vực của chức năng .

0

Để phát triển kỹ thuật số và xem xét giao diện người dùng (HTML/CSS/JS), tôi sử dụng phương pháp này để đảm bảo tôi luôn được tổ chức và suy nghĩ trước khi thực hiện. Đã chứng minh để tạo ra mã sạch hơn, có tổ chức hơn, dịch tốt hơn để làm nhiều hơn với ít chi phí hơn.

Trong một stylesheet điển hình, tôi đang thiết lập như thế này:

/* Style Guide – Mobile First 
    1. =Setup 
    2. =Modules as independent units made up of components 
    3. =Components as group of reusable code containing more than one element 
    4. =Classes 
    5. =Responsive as enhancement 
*/ 
  • Modules đơn vị độc lập tạo thành từ các thành phần: Header, Footer, mục, điều, Bên cạnh, vv Một nhà được tạo thành từ nhiều phòng, tất cả đều có phong cách và chức năng đặc biệt để tạo ra toàn bộ độc lập.
  • Components như một nhóm mã tái sử dụng chứa nhiều hơn một yếu tố: Danh sách không thứ tự, Quotes, Thủy, Bàn vv

Tôi đã viết một lời giải thích đầy đủ hơn bạn có thể đọc here.

Hy vọng điều này sẽ hữu ích!

0

Component là một thực thể thời gian chạy (có thể được tạo thành từ các mô-đun), đơn vị độc lập Runnable

Module là một hệ thống phân chia thành các đơn vị thực hiện, phân công nhiệm vụ độc lập. Mô-đun có thể hoặc có thể không phải là một thành phần

0

Theo quan điểm của tôi, ModuleComponent là tất cả chỉ là một vài hàm và nội dung.

Và sự khác nhau giữa chúng là:

Component có kinh doanh hợp lý và mô-đun không.

Ví dụ: vùng nhập văn bản này chỉ là một Mô-đun, nhưng khi có một số api được gọi, nó sẽ trở thành một Thành phần. bạn có thể đặt một mô-đun ở mọi nơi và nó sẽ hoạt động tốt, nhưng Componet chỉ có thể được sử dụng trong một trang hoặc chế độ xem cụ thể (coz nó có cuộc gọi api cụ thể)

Các vấn đề liên quan