Asp.net 如何构造解决方案文件和文件夹以最适合MVP设计模式?
您能否建议以一种与MVP设计模式相匹配的方式构造解决方案项目、文件和Fodler,以表示模式理念 我的意思是,你会如何放置你的演示者、数据访问层、视图等Asp.net 如何构造解决方案文件和文件夹以最适合MVP设计模式?,asp.net,.net,visual-studio,mvp,Asp.net,.net,Visual Studio,Mvp,您能否建议以一种与MVP设计模式相匹配的方式构造解决方案项目、文件和Fodler,以表示模式理念 我的意思是,你会如何放置你的演示者、数据访问层、视图等 谢谢下面将是一个很好的开始。如果项目变得更大,您可以拆分得更多: Company.Project.Core -> Controller logic Company.Project.Domain -> Domain models (view models and database models) Company.Project.Int
谢谢下面将是一个很好的开始。如果项目变得更大,您可以拆分得更多:
Company.Project.Core -> Controller logic
Company.Project.Domain -> Domain models (view models and database models)
Company.Project.Interface -> Views, presenters
解决方案体系结构通常与您使用的UI体系结构非常独立,尽管如果您计划有多个UI应用程序(大多数项目不这样做),可能会有一些额外的分离 我倾向于从类似以下的模板开始:
或Acme.Sales
-内部域/业务逻辑Acme.Sales.Core
-用于持久层的数据实体。实体具有与核心(域)模型类似的类结构,但往往具有更薄的逻辑、附加属性,如Acme.Sales.Entities
、双向关系(与域模型中的单向关系相反)和Id
成员,以便ORM能够覆盖。此程序集通常还包括用于实体上CRUD操作的抽象存储库虚拟
其中Acme.Sales.Entities.Impl
类似于Impl
或LinqToSql
-此名称空间定义了实际持久化NHibernate
实体的一个可能实现。这里是抽象存储库的具体实现
包含与任何用户界面相关的公共类-可能是MVP GUI,甚至是CLI。与Acme.Sales.UI
一样,这些实体类似于实体
类,但往往具有特定于表示的逻辑和属性,例如验证和格式化(今天最常见的是通过核心
)。请注意,核心库也应该进行验证,但UI验证往往更多地是关于输入的格式化和清理,而不是业务规则。在这里模仿域的类结构是很有诱惑力的,但是如果你坚持为你的UI模型使用平面的DTO风格的类,你会有一个更轻松的时间数据注释
包含抽象或具体的“服务”类型,用于与UI和域/持久层交互。因此,该项目依赖于Acme.Sales.UI.Services
(域)、Acme.Sales
(抽象存储库)以及Acme.Sales.Entities
,并处理这些不同层之间的所有映射活动Acme.Sales.UI
其中Acme.Sales.UI.Impl
这里有一些类似于Impl
、Mvp
、Mvc
,等等。如果需要,可以从此命名空间中删除Mvvm
,因为实现暗示了它是什么。这通常依赖于UI
项目,但会添加特定于特定UI模型的内容;控制器、演示者、视图模型等。这是您实际的“应用程序”。它也是您通常选择IoC容器(AutoFac、Ninject、Spring.NET、Castle、Unity)并将所有特定实现连接到抽象类型的地方UI
- 在应用程序项目中,您希望将逻辑概念划分为不同的子名称空间/文件夹。例如,如果您开始获得大量屏幕(例如,
和视图。账单
),请将您的演示者放置在视图。配送
中,并将视图放置在演示者
中-非常简单-并在每个视图中创建子目录。也可以在此处创建顶级视图
目录/名称空间,并在每个区域中放置单独的区域
、演示者
,等等。这是ASP.NET MVC当前采用的方法视图
演示者
和视图
分为不同的项目。请放心,您为MVP定制的视图对MVC或MVVM完全没有用处,反之亦然。模型驱动的应用程序中唯一有可能被重用的部分就是模型本身
请注意,对于一个只有一个数据库和相对简单的域逻辑的应用程序来说,这只是一个非常基本的体系结构。它不包括任何更高级别的后端构造,如应用程序集成(如web服务)、事件(发布/订阅)、批处理、CQS、即席报告等。这些在更大规模的商业应用程序中很常见,但如果你刚刚开始使用一个新的社交书签应用程序,那么你就不需要那么复杂了
另外请注意:这都是假设您正在计划至少一个中等规模的项目——假设您和/或您的团队将在6个月或更长时间内完成一个项目。如果您计划在一个月或更短的时间内完成这一切,请不要在解决方案体系结构上浪费时间。只要项目足够小,易于理解和维护,就可以将所有内容塞进一个项目中,并为域、实体和UI重用相同的类。仔细监视复杂性和维护开销,如果项目开始变成一个烂泥,就考虑重构到上面的结构中。 <代码>核>代码>通常保留在域类中,顺便说一下,它不应该在与数据模型相同的程序集/命名空间中。(假设您的项目实际上同时具有这两种功能).
UI
对于用户界面代码来说也是比interface
更典型的约定。如果视图和演示者未分为两个不同的项目,那么如果我需要更改视图,该怎么办?在您的情况下,我需要在另一个项目中再次重写整个演示者模型。相反,您应该