面向架构(结构)与面向特征的项目结构


14

我参与的该项目具有面向架构的项目的文件/文件夹结构:

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>
    |____ ...

从系统的体系结构观点来看,这是显而易见的(已由开发团队提出)。

它是设计人员团队提出的面向功能的结构:

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>
    |____ ...

该变体更接近于设计人员,并且清楚地描述了要实现的功能。

我们的团队开始了一场圣战:什么是最好的方法。有人可以帮助我们,并解释第一者和第二者的利弊。也许有第三种对我们俩都更有用和有益。

谢谢。


我不了解任何一种结构-事件和请求(以及事件处理程序和请求处理程序)之间有什么区别?
彼得·布顿

1
非常明确的问题-中立也!
Michael K

1
从可伸缩性的角度来看,第二种方法应该很容易横向扩展。
CodeART

Answers:


11

我将投票赞成第二项。在第一种结构中,的事件处理程序FeatureA与的事件处理程序完全无关FeatureB。似乎开发人员将一次处理一个功能,如果您正在处理FeatureX请求,则很有可能需要调整FeatureX请求处理程序,而不是FeatureZ请求。

顺便说一句,我喜欢您从中立的角度问这个问题的方式。


1
+1有一个警告:对于小型项目,第二个将导致文件结构比要放入的文件大。我将第一个用于那些。
Michael K

@Michael我同意,但是在这种情况下,这是一个大项目。
Zzz

1
+1:如果您必须与用户/客户交谈,则术语可以相当一致。
史蒂文·埃弗斯

4

我一直对第二种方法比较满意,但是对于真正的共享/基类,我总是有一个称为“通用”或“通用”的“功能”。

方法二将真正分开的事物分开,但是没有“公共”区域,有时它会将事物分成不合适的区域。


普通和通用+1(每个项目都有通用工具,工具...)
Zzz 2010年

3

功能发明人为什么要关心实现细节?如果那是论点两边的分隔,那么我认为答案很明确。发明构想/功能的人员无法确定实施者所需的文件结构。

当功能的实现跨越多个dll,exe,数据库或其他软件时,这是一个特别重要的问题。


1
我曾考虑过这一点,但是,在所有其他条件相同的情况下,第二种方法对于除最琐碎的应用程序之外的所有应用程序都具有明显的哲学优势。至少,这是一个好建议。
罗伯特·哈维

@Robert Harvey:如果您在谈论项目的思想组织,那么我需要考虑一个新的答案。但是,听起来好像他们在谈论包含代码的文件……
John Fisher

关键是将要素分离到不同的存储桶中。对于除最小应用程序以外的所有应用程序,无论是引用文件夹结构,类结构还是命名空间约定,都将需要类似这样的组织。
罗伯特·哈维

1
@Robert Harvey:关于构建和部署问题?诸如仅能够使用IDE来编写和调试代码之类的简单事情怎么样?其中一些东西应该对文件夹结构产生强大的影响。
约翰·费希尔

1

给定两种选择,必须同意第二种方法。第一个看起来像一个无定形的斑点。至少第二个具有某种形状。

这实际上取决于项目的规模。如果“功能”很大,则它们各自需要各自不同的存储桶。


1

我不理解您使用的术语,但是无论如何都会尝试回答,因为这两种结构似乎都是错误的方法。

除非您只有少数功能,否则您需要将它们分为几类-并且这两种设计似乎都无法满足(除非这就是Node1的意图,但是“项目的所有X”都建议)否则,让我怀疑是WTF-是否有Node2?)

我可能会考虑这样的事情:

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
|   |
|

或这个:

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


但是他们俩都在做出可能完全不成立的假设-如果您可以更详细地更新问题,我可能会改变主意。:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.