使用MVC5的企业级应用程序架构的最佳实践是什么?

Had*_*dee 19 architecture enterprise solution asp.net-mvc-5

我想知道基于MVC5的企业级架构的最佳实践是什么.我的意思是在一个解决方案中选择多层或多个项目?或者可能不止一个解决方案?任何好的示例项目?

Had*_*dee 31

由于我的问题在去年被访问了很多,并且没有可靠的答案,因为我知道这一点,我决定尽可能提供全面的答案.这个答案是基于一些实际的项目经验和很少的专家咨询:

  1. 首先,重要的是要注意在软件设计过程中,没有什么比较可靠的是非.只要一种方法适用于您的项目并且适合,它就是right,如果它没有,那就是wrong.软件设计中没有严格的原则.有Project needs and specifications.但是,使用一般,它已被接受Design Patterns and Principles品牌更加突出robust,reliable并且easy to maintain使您的代码loosely coupled and highly cohesive.
  2. 整个故事Software Design and Architecture是关于如何轻松管理项目以及如何保持未来的变化.考虑哪种方法可以为您提供最佳答案.这对你来说是最好的.不要过多考虑 Professionalism!你的项目随着时间的推移而变得越来越成熟.所以想想你的项目吧!
  3. 作为企业级应用程序架构的第一步,请始终尝试遵循Separation of ConcernsSoC.这意味着您应该为项目的不同层设置不同的层.强烈建议使用不同的项目在你的 解决方案Data Access Layer,Domain Entities,Business LayerPresentation Layer.在MVC5项目,它是更好地使用Class Library ProjectData Access Layer,Domain Entities,Business Layer和MVC项目Presentation Layer.
  4. Data Access Layer是面向数据库和数据库交互的项目.您可以拥有Entity Framework此项目中的所有或类似实体.为数据库层分离层意味着在更改项目数据仓库的情况下,您唯一需要更改的是更改此项目以及对您的项目进行一些小的更改Business Layer.解决方案中的所有其他项目保持不变.所以,你可以很容易地移动从MS SQL到Oracle或Entity FrameworkNHibernate.
  5. Domain Entities是我用来定义所有解决方案级别接口,类,枚举和变量的项目.这个项目在我的课程和方法的整个解决方案中保持完整性.我在整个解决方案中的所有类都继承自此项目中的接口.所以我有一个地方可以改变我的类或全局变量,它意味着Easy to Maintain我的解决方案的未来,并且对于新加入的开发人员来说很容易理解.
  6. Business Layer是我把我所有的业务逻辑,包括地方 Business EntitiesBusiness Services.关于这一层的整个想法是有一个地方来保持您的所有业务方法和交互.所有计算,对象修改以及有关数据的所有逻辑(包括保存,检索,更改等)都应在本节中进行.通过在项目中使用此层,您可以同时拥有不同的使用者,例如一个本机MVC和一个Web API层.或者您可以根据不同的商业服务消费者规格提供不同的喂养.强烈建议避免将任何业务逻辑放入MVC层的控制器部分.在控制器中具有任何业务逻辑意味着您将表示层用作业务逻辑层并且它违反了Separation of Concerns.然后,从一个表示层更改为其他表示层或为您的解决方案使用不同类型的使用者并不容易.最好将MVC中的控制器部分尽可能地保持苗条.控制器应该只有与之直接相关的逻辑和方法View Models.有关View Models 参考部分的更多信息7.要记住的一件事是,最好Business Services根据您的解决方案对象或不同的类Business Entities.
  7. Presentation Layer在MVC解决方案中将是一个MVC项目.但是,对于不同的消费者或技术,解决方案可以具有其他类型或多个表示层.例如,您可以拥有一个MVC层和Web API一个解决方案.通常使用表示层来保留所有表示逻辑.表示逻辑不应具有与业务逻辑或数据逻辑相关的任何内容.那么问题是什么Presentation logicPresentation logic是与视图模型相关的逻辑.视图模型是为视图或页面定制的对象.在大多数情况下,业务对象不适合在视图中使用.另一方面,表示视图通常需要一些验证逻辑或表示逻辑,例如显示名称与原始对象名称不同.在这些情况下,最好将表示逻辑与业务逻辑分开,以便能够轻松地独立更改表示逻辑或业务逻辑,甚至可以轻松切换表示层以用于不同的UI设计或更改业务逻辑以获得更多功能而无需担心任何中断表示逻辑.在使用MVC项目作为解决方案的表示层的情况下,所有视图模型应该放在 ModelsMVC项目的部分中,并且所有表示逻辑应该放在Controllers项目的部分中.
  8. 最后要说的是,对于每个多层解决方案,您需要用于对象到对象映射的框架,例如将业务实体转换为视图模型.有一些工具用于此目的,如AutoMapper,BLToolkitEmitMapper.

最后一句话:请评论和评分question,answer让我做得更好!