罗伯特·C·马丁 (Robert C. Martin) 在他关于清洁架构的一次演讲中公开批评当今相当标准的做事方式。 Robert C. Martin - Clean Architecture and Design
我所理解的标准方式
是这样的:
solution
- UI project
- Models
- Views
- Controllers
- Assets
- Logic project
- Data project
Martin 在这里说,当您查看其顶级目录结构时,应用程序应该立即揭示其用途......我想知道,任何人都可以提供这种目录结构的示例,例如在使用 MVVM 模式作为交付机制时?如何按照 Martin 所描述的方式构建他的应用程序?
最佳答案
根据我在您的示例中看到的内容,我只能猜测它是一个 ASP.NET MVC 应用程序,我们需要查看 Logic
或 Data
项目了解此应用程序的内容。
大多数时候,人们根据所使用的技术或框架来组织他们所有的目录结构。这来自默认项目模板的创建方式(他们对您的应用程序应该做什么一无所知,他们真的不能为我们做更多)。
现在,Robert C. Martin 告诉我们的是,我们的顶级目录结构应该反射(reflect)应用程序的作用,而不是它是如何构建的。我不确定在解决方案级别这样做是不是一个好主意。但是,我总是建议有一个 Domain
项目,我们可以申请 Domain Driver Design原则。
如果在这样的 Domain 项目中,您在根级别看到以下文件夹:
Clients
Orders
Billing
Shipping
Promotions
...
您可能会猜到它是某种电子商务应用程序。如果您发现的文件夹类似于 Models
、DTOs
或 Exceptions
,则您必须深入了解目录结构。
我不喜欢在我的解决方案中有太多项目(如果可能的话少于 10 个)所以我不会去为我系统的每个域对象创建一个项目。这就是为什么我认为项目的根级别而不是解决方案是我们应该将注意力集中在定义应用程序正在做什么的原因。
关于c# - 顶级目录结构如何揭示应用程序的目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16000284/