使用 MVC5 的企业级应用程序架构的最佳实践是什么?
What is the best practice for Enterprise level application architecture using MVC5?
我想知道基于 MVC5 的企业级架构的最佳实践是什么。我的意思是在一个解决方案中选择多层或多个项目?或者可能不止一种解决方案?有什么好的示例项目吗?
看看Contoso University。企业级应用的优秀范例。
由于我的问题在去年被访问了很多,据我所知没有可靠的答案,我决定尽可能提供一个全面的答案。本回答基于一些实际项目经验,咨询专家不多:
- 首先需要注意的是,在软件设计中
过程,没有什么比坚实的对与错更重要的了。只要一个
方法适用于您的项目并且很适合,它是
right
如果
不是,是wrong
。软件中没有严格的原则
设计。有Project needs and specifications
。但一般来说,
它已被接受使用 Design Patterns and Principles
makes
投射更多 robust
、reliable
和 easy to maintain
并制作
你的代码 loosely coupled and highly cohesive
.
Software Design and Architecture
的整个故事是关于如何
您可以轻松地管理您的项目以及如何维护您的项目
未来的变化。考虑哪种方法可以为您提供最佳答案
他们。那将是最适合你的。不要想太多
Professionalism
! .您的项目随着时间的推移而增长并变得更加成熟。
所以想想你的项目吧!
- 作为企业级应用程序架构的第一步,
始终尝试遵循
Separation of Concerns
或 SoC
。这意味着你
项目的不同层应该有不同的层。它
强烈建议在您的项目中使用不同的 project
Data Access Layer
、Domain Entities
、Business Layer
和 Presentation Layer
的解决方案。在 MVC5 项目中,最好将 Class Library Project
用于 Data Access Layer
、Domain Entities
、Business Layer
,将 MVC 项目用于 Presentation Layer
。
Data Access Layer
是面向数据库和数据库交互的项目。您可以在此项目中拥有所有 Entity Framework
或类似实体。将数据库层分开意味着在更改项目数据仓库的情况下,您唯一需要更改的是更改此项目以及对 Business Layer
进行一些小的更改。您解决方案中的所有其他项目都保持不变。因此,您可以轻松地从 MS Sql 迁移到 Oracle,或者从 Entity Framework
迁移到 NHibernate
。
Domain Entities
是我用来定义我所有解决方案的项目
级别接口,类,枚举和变量。这个项目保持
我的 类 和我的方法的整个解决方案的完整性。我的
整个解决方案中的所有 类 都继承自此中的接口
项目。所以我有 一个地方 来更改我的 类 或全局
变量,在我的解决方案中它意味着 Easy to Maintain
未来
新加入项目的开发人员易于理解。
Business Layer
是我放置所有业务逻辑的地方,包括
Business Entities
和 Business Services
。整个想法关于
这一层有一个地方来保存你所有的业务方法和
相互作用。所有计算、对象修改和所有逻辑
关于数据的保存、检索、更改等应该
发生在这个部分。通过在你的项目中加入这一层,你
可以同时有不同的消费者,例如一个
本机 MVC
和一个 Web API
层。或者你可以提供不同的
基于不同业务服务消费者的喂养
规格。强烈建议避免将任何
业务逻辑进入 MVC 层的控制器部分。有任何
控制器内的业务逻辑意味着您使用您的演示文稿
层作为业务逻辑层,它违反了 Separation of Concerns
。然后,从一个表示层更改为另一个表示层或为您的不同类型的消费者提供不同类型的消费者并不容易
解决方案。最好让 MVC 中的控制器部分尽可能苗条
可能的。控制器应该只有逻辑和方法
与 View Models
直接相关。有关 View Models
的更多信息
请参阅 7
部分。要记住一件事,最好是
根据您的解决方案有不同的 Business Services
类
对象或 Business Entities
.
Presentation Layer
在 MVC 解决方案中将是一个 MVC 项目。但
解决方案可以有其他类型或多个表示层
针对不同的消费者或技术。例如你可以有
一个 MVC 层和一个 Web API
在一个解决方案中。一般使用
表示层将所有表示逻辑保存在其中。
表示逻辑不应与业务逻辑相关
或数据逻辑。那么问题是 Presentation logic
是什么?
Presentation logic
是与视图模型相关的逻辑。查看模型
是为视图或页面定制的对象。大多数情况下,企业
对象不适合在视图中使用。另一方面,
演示视图通常需要一些验证逻辑或
表示逻辑,例如显示名称与原始名称不同
对象名称。在这些情况下,最好保留表示逻辑
与业务逻辑分开,以便于更改表示
逻辑或业务逻辑独立甚至容易切换
不同 UI 设计或不断变化的业务的表示层
拥有更多功能而不用担心任何中断的逻辑
与表示逻辑。在使用 MVC 项目的情况下
解决方案的表示层,所有视图模型都应该放在
Models
MVC 项目部分和所有表示逻辑应该是
放置在项目的 Controllers
部分。
- 最后要说的是,对于每个多层解决方案,您需要
对象到对象映射的框架,例如将您的
业务实体查看模型。有一些工具可以做到这一点
AutoMapper
、BLToolkit
和 EmitMapper
. 等用途
最后一句话:请评论打分question
和我的answer
,让它变得更好!
我想知道基于 MVC5 的企业级架构的最佳实践是什么。我的意思是在一个解决方案中选择多层或多个项目?或者可能不止一种解决方案?有什么好的示例项目吗?
看看Contoso University。企业级应用的优秀范例。
由于我的问题在去年被访问了很多,据我所知没有可靠的答案,我决定尽可能提供一个全面的答案。本回答基于一些实际项目经验,咨询专家不多:
- 首先需要注意的是,在软件设计中
过程,没有什么比坚实的对与错更重要的了。只要一个
方法适用于您的项目并且很适合,它是
right
如果 不是,是wrong
。软件中没有严格的原则 设计。有Project needs and specifications
。但一般来说, 它已被接受使用Design Patterns and Principles
makes 投射更多robust
、reliable
和easy to maintain
并制作 你的代码loosely coupled and highly cohesive
. Software Design and Architecture
的整个故事是关于如何 您可以轻松地管理您的项目以及如何维护您的项目 未来的变化。考虑哪种方法可以为您提供最佳答案 他们。那将是最适合你的。不要想太多Professionalism
! .您的项目随着时间的推移而增长并变得更加成熟。 所以想想你的项目吧!- 作为企业级应用程序架构的第一步,
始终尝试遵循
Separation of Concerns
或SoC
。这意味着你 项目的不同层应该有不同的层。它 强烈建议在您的项目中使用不同的 projectData Access Layer
、Domain Entities
、Business Layer
和Presentation Layer
的解决方案。在 MVC5 项目中,最好将Class Library Project
用于Data Access Layer
、Domain Entities
、Business Layer
,将 MVC 项目用于Presentation Layer
。 Data Access Layer
是面向数据库和数据库交互的项目。您可以在此项目中拥有所有Entity Framework
或类似实体。将数据库层分开意味着在更改项目数据仓库的情况下,您唯一需要更改的是更改此项目以及对Business Layer
进行一些小的更改。您解决方案中的所有其他项目都保持不变。因此,您可以轻松地从 MS Sql 迁移到 Oracle,或者从Entity Framework
迁移到NHibernate
。Domain Entities
是我用来定义我所有解决方案的项目 级别接口,类,枚举和变量。这个项目保持 我的 类 和我的方法的整个解决方案的完整性。我的 整个解决方案中的所有 类 都继承自此中的接口 项目。所以我有 一个地方 来更改我的 类 或全局 变量,在我的解决方案中它意味着Easy to Maintain
未来 新加入项目的开发人员易于理解。Business Layer
是我放置所有业务逻辑的地方,包括Business Entities
和Business Services
。整个想法关于 这一层有一个地方来保存你所有的业务方法和 相互作用。所有计算、对象修改和所有逻辑 关于数据的保存、检索、更改等应该 发生在这个部分。通过在你的项目中加入这一层,你 可以同时有不同的消费者,例如一个 本机MVC
和一个Web API
层。或者你可以提供不同的 基于不同业务服务消费者的喂养 规格。强烈建议避免将任何 业务逻辑进入 MVC 层的控制器部分。有任何 控制器内的业务逻辑意味着您使用您的演示文稿 层作为业务逻辑层,它违反了Separation of Concerns
。然后,从一个表示层更改为另一个表示层或为您的不同类型的消费者提供不同类型的消费者并不容易 解决方案。最好让 MVC 中的控制器部分尽可能苗条 可能的。控制器应该只有逻辑和方法 与View Models
直接相关。有关View Models
的更多信息 请参阅7
部分。要记住一件事,最好是 根据您的解决方案有不同的Business Services
类 对象或Business Entities
.Presentation Layer
在 MVC 解决方案中将是一个 MVC 项目。但 解决方案可以有其他类型或多个表示层 针对不同的消费者或技术。例如你可以有 一个 MVC 层和一个Web API
在一个解决方案中。一般使用 表示层将所有表示逻辑保存在其中。 表示逻辑不应与业务逻辑相关 或数据逻辑。那么问题是Presentation logic
是什么?Presentation logic
是与视图模型相关的逻辑。查看模型 是为视图或页面定制的对象。大多数情况下,企业 对象不适合在视图中使用。另一方面, 演示视图通常需要一些验证逻辑或 表示逻辑,例如显示名称与原始名称不同 对象名称。在这些情况下,最好保留表示逻辑 与业务逻辑分开,以便于更改表示 逻辑或业务逻辑独立甚至容易切换 不同 UI 设计或不断变化的业务的表示层 拥有更多功能而不用担心任何中断的逻辑 与表示逻辑。在使用 MVC 项目的情况下 解决方案的表示层,所有视图模型都应该放在Models
MVC 项目部分和所有表示逻辑应该是 放置在项目的Controllers
部分。- 最后要说的是,对于每个多层解决方案,您需要
对象到对象映射的框架,例如将您的
业务实体查看模型。有一些工具可以做到这一点
AutoMapper
、BLToolkit
和EmitMapper
. 等用途
最后一句话:请评论打分question
和我的answer
,让它变得更好!