顶级目录结构如何揭示应用程序的用途?

wal*_*her 6 c# architecture mvvm

罗伯特·C·马丁在他关于清洁建筑的一次谈话中公开批评了当今相当标准的做事方式. Robert C. Martin - 清洁建筑与设计

我理解的standard way是这样的:

solution
    - UI project
        - Models
        - Views
        - Controllers
        - Assets
    - Logic project
    - Data project
Run Code Online (Sandbox Code Playgroud)

Martin在这里说,当你查看它的顶级目录结构时,应用程序应该立即显示它的用途......我想知道,任何人都可以提供这样的目录结构的例子,例如在使用MVVM模式作为传递机制时吗?如何按照马丁描述的方式构建他的应用程序?

Pas*_*cal 2

从我在您的示例中看到的情况来看,我只能猜测它是一个 ASP.NET MVC 应用程序,我们需要查看LogicData项目来了解该应用程序的用途。

大多数时候,人们根据所使用的技术或框架来组织所有目录结构。这来自默认项目模板的创建方式(对您的应用程序应该做什么一无所知,他们实际上不能为我们做更多的事情)。

现在,Robert C. Martin 告诉我们的是,我们的顶级目录结构应该反映应用程序的功能,而不是它的构建方式。我不确定在解决方案级别这样做是个好主意。然而,我总是建议有一个Domain项目,我们可以应用域驱动程序设计原则。

如果在此类项目中,您在根级别看到以下文件夹:

Clients
Orders
Billing
Shipping
Promotions
...
Run Code Online (Sandbox Code Playgroud)

您可能会猜到这是某种电子商务应用程序。Models如果您找到的文件夹类似于、DTOs或 ,则您必须更深入地了解目录结构Exceptions

我不喜欢我的解决方案中有太多项目(如果可能的话,少于 10 个),因此我不会为系统的每个域对象创建一个项目。这就是为什么我认为项目的根级别而不是解决方案是我们应该将注意力集中在定义应用程序正在做什么上。