Kiến trúc (cấu trúc) được định hướng so với cấu trúc dự án theo định hướng


14

Dự án, tôi đã tham gia, có cấu trúc tệp / thư mục của dự án hướng kiến ​​trúc:

Root
|____ Node1
    |____ Event Handlers
    |         |___ <all event handlers of project>
    |____ Events
    |         |___ <all events of project>
    |____ Request Handlers  
    |         |___ <all request handlers of project>
    |____ Requests
    |         |___ <all requests of project>
    |____ ...

Đó là một quan điểm rõ ràng từ quan điểm kiến ​​trúc của hệ thống (đã được đề xuất bởi nhóm phát triển).

Đó là một cấu trúc hướng tính năng đã được đề xuất bởi nhóm thiết kế:

Root
|____ Feature #1
    |____ Event Handlers
    |         |___ <all event handlers of Feature #1>
    |____ Events
    |         |___ <all events of Feature #1>
    |____ Request Handlers  
    |         |___ <all request handlers of Feature #1>
    |____ Requests
    |         |___ <all requests of Feature #1>
    |____ ...

Biến thể này gần hơn với các nhà thiết kế và nó mô tả rõ ràng một tính năng sẽ được thực hiện.

Các đội của chúng tôi đã bắt đầu một cuộc chiến thần thánh: cách tiếp cận tốt nhất là gì. Ai đó có thể giúp chúng tôi và giải thích những nhược điểm và ưu điểm của cái thứ nhất và thứ hai. Có lẽ có một thứ ba hữu ích hơn và có lợi cho cả hai chúng ta.

Cảm ơn bạn.


Tôi không hiểu cấu trúc nào - sự khác biệt giữa Sự kiện và Yêu cầu (và do đó, Trình xử lý sự kiện và Trình xử lý yêu cầu) là gì?
Peter Boughton

1
Câu hỏi rất rõ ràng - và trung lập quá!
Michael K

1
Từ góc độ khả năng mở rộng, cách tiếp cận thứ hai nên khá dễ dàng để mở rộng theo chiều ngang.
CodeART

Câu trả lời:


11

Tôi sẽ bỏ phiếu cho cái thứ hai. Trong cấu trúc đầu tiên, trình xử lý sự kiện FeatureAhoàn toàn không liên quan đến trình xử lý sự kiện FeatureB. Có vẻ như các nhà phát triển sẽ làm việc trên một tính năng tại một thời điểm và nếu bạn đang làm việc theo FeatureXyêu cầu, nhiều khả năng bạn sẽ cần phải điều chỉnh một FeatureXtrình xử lý yêu cầu hơn là, FeatureZyêu cầu.

Nhân tiện, tôi thích cách bạn hỏi câu hỏi này từ quan điểm trung lập.


1
+1 với một cảnh báo: đối với các dự án nhỏ, lần thứ hai sẽ dẫn đến cấu trúc tệp lớn hơn so với các tệp được đặt vào. Tôi sẽ sử dụng tệp đầu tiên cho các dự án đó.
Michael K

@Michael tôi đồng ý, nhưng trong trường hợp này đó là một dự án lớn.
Zzz

1
+1: Và nếu bạn từng phải trò chuyện với người dùng / khách hàng, thì thuật ngữ này có thể khá nhất quán.
Steven Evers

4

Tôi luôn thấy thoải mái hơn với cách tiếp cận thứ hai, nhưng tôi luôn có một "tính năng" được gọi là chung hoặc chung cho các lớp cơ sở / chia sẻ thực sự.

Cách tiếp cận hai giữ những thứ thực sự tách biệt, nhưng không có khu vực "chung", đôi khi nó phân tách mọi thứ thành các khu vực mà chúng không phù hợp.


+1 cho chung và chung (mọi dự án đều có tiện ích chung, công cụ ...)
Zzz

3

Tại sao các nhà phát minh tính năng quan tâm đến các chi tiết thực hiện? Nếu đó là sự tách biệt giữa các mặt của tranh luận, thì tôi nghĩ câu trả lời là rõ ràng. Những người phát minh ra ý tưởng / tính năng không xác định cấu trúc tệp cần thiết cho người thực hiện.

Đây là một vấn đề đặc biệt quan trọng khi việc triển khai một tính năng kéo dài nhiều dll, exes, cơ sở dữ liệu hoặc các phần mềm khác.


1
Tôi nghĩ về điều đó, nhưng, tất cả những thứ khác đều bằng nhau, cách tiếp cận thứ hai có một số lợi thế triết học rõ ràng cho tất cả trừ những ứng dụng tầm thường nhất. Ít nhất, đó là một gợi ý tốt.
Robert Harvey

@Robert Harvey: Nếu bạn đang nói về tổ chức ý tưởng của dự án, thì tôi sẽ cần phải nghĩ ra một câu trả lời mới. Tuy nhiên, có vẻ như họ đang nói về các tệp chứa mã ...
John Fisher

Điều quan trọng là tách các tính năng thành các thùng riêng biệt. Đối với tất cả, trừ những ứng dụng nhỏ nhất, bạn sẽ cần một loại tổ chức như thế này, cho dù bạn đang đề cập đến cấu trúc thư mục, cấu trúc lớp hay quy ước không gian tên.
Robert Harvey

1
@Robert Harvey: Còn vấn đề xây dựng và triển khai thì sao? Còn những thứ đơn giản hơn như chỉ đơn thuần là có thể sử dụng IDE để viết và gỡ lỗi mã thì sao? Một số trong những điều này sẽ có tác động mạnh mẽ đến các cấu trúc thư mục.
John Fisher

1

Phải đồng ý với cách tiếp cận thứ hai, đưa ra hai lựa chọn. Cái đầu tiên trông giống như một đốm vô định hình. Ít nhất cái thứ hai có một số hình dạng.

Nó thực sự phụ thuộc vào mức độ lớn của dự án. Nếu "tính năng" lớn, mỗi cái cần một thùng riêng biệt.


1

Tôi không hiểu thuật ngữ bạn đang sử dụng, nhưng dù sao cũng sẽ cố gắng trả lời, vì cả hai cấu trúc dường như là cách tiếp cận sai.

Trừ khi bạn chỉ có một số tính năng, bạn cần nhóm chúng thành các loại - và điều đó dường như không được phục vụ trong cả hai thiết kế (trừ khi đó là mục đích của Node1, nhưng "tất cả X của dự án" cho thấy mặt khác, và làm cho tôi tự hỏi WTF nó là - có Node2 không?)

Tôi có thể xem xét một cái gì đó như thế này:

Root
|____ Event Handlers
|   |____ Category A
|   |    |___ Feature #1 EHs
|   |    |___ Feature #2 EHs
|   |    |___ Feature #3 EHs
|   |
|   |____ Category B
|   |    |___ Feature #4 EHs
|   |    |___ Feature #5 EHs
|   |
|
|____ Events
|   |____ Category A
|   |    |___ Feature #1 Events
|   |    |___ Feature #2 Events
|   |    |___ Feature #3 Events
|   |
|   |____ Category B
|   |    |___ Feature #4 Events
|   |    |___ Feature #5 Events
|   |
|

Hoặc này:

Root
|____ Category A
|   |____ Event Handlers
|   |    |___ Feature #1 EHs
|   |    |___ Feature #2 EHs
|   |    |___ Feature #3 EHs
|   |
|   |____ Events
|        |___ Feature #1 Events
|        |___ Feature #2 Events
|        |___ Feature #3 Events
|   
|____ Category B
|   |____ Event Handlers
|   |    |___ Feature #4 EHs
|   |    |___ Feature #5 EHs
|   |
|   |____ Events
|        |___ Feature #4 Events
|        |___ Feature #5 Events


Nhưng cả hai đều đưa ra các giả định có thể hoàn toàn tắt - nếu bạn có thể cập nhật câu hỏi của mình với nhiều chi tiết hơn, tôi có thể thay đổi suy nghĩ của mình. :)

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.