我想知道基于MVC5的企业级体系结构的最佳实践是什么。我的意思是在一个解决方案中在多层或多个项目之间进行选择?也许是多个解决方案?任何好的示例项目?
由于我的问题在去年被访问了很多次,并且据我所知没有一个可靠的答案,因此我决定尽可能提供一个全面的答案。该答案基于一些实际项目经验,并且很少进行专家咨询:
right
,如果不能,那就可以了wrong
。在软件设计中没有严格的原则。有Project needs and specifications
。但是,使用一般,它已被接受Design Patterns and Principles
品牌更加突出robust
,reliable
并且easy to maintain
使您的代码loosely coupled and highly cohesive
。Software Design and Architecture
涉及如何轻松管理项目以及如何维护将来的更改。考虑哪种方法可以为您提供最佳答案。那将是最适合您的。不要想太多Professionalism
!您的项目会随着时间的增长而变得越来越成熟。因此,请考虑您的项目!Separation of Concerns
或SoC
。这意味着您应该为项目的不同层使用不同的层。强烈建议使用不同的项目在你的解决方案为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
以使其更好!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句