ASP.NET MVC4 n-Tier架构:最好的方法

Dav*_*ide 4 n-tier-architecture asp.net-mvc-4 entity-framework-5

我为MVC4 webapp + EntityFramwork5开发了3层架构.我想保留separete这个层,所以只有DAL知道我正在使用EF,例如.

实际上我有很多课程来管理:

DAL

  1. 实体POCO
  2. 实体DataContext:DbContext
  3. 实体存储库

BL

  1. 实体ViewModel
  2. 实体服务(实例化实体存储库)

WEB

  1. 实体控制器(实例化实体服务)

这是有效的,但很难保持.我想在DAL中删除实体存储库并直接使用DataContext(如果我没有错,在所有DbContext被设计为存储库和工作单元之后),但这将迫使我添加一个引用我的BL中的EntityFramework.dll.这不是一个大问题,但我不确定它是最好的选择.

有什么建议?

(我希望我提供了足够的信息,如果你需要更多,请问)

小智 5

你可以使用这个 这个这个文章.

An experienced Architect does not need to go through every single step in the book to get a reasonable design done for a small web
Run Code Online (Sandbox Code Playgroud)

应用.这样的建筑师可以利用他们的经验来加速这个过程.由于我之前已经完成了类似的Web应用程序并且已经理解了我的可交付成果,因此我将采用更快的方法来完成DMS设计的初始部分.这有望帮助我缩短本文的篇幅.

For those who do not have experience, let me briefly mention the general steps that involved in architecturing a software below...

Understand the initial customer requirement - Ask questions and do research to further elaborate the requirement
Define the process flow of the system preferably in visual (diagram) form. I usually draw a process-flow diagram here. In my
Run Code Online (Sandbox Code Playgroud)

努力,我会首先尝试定义系统的手动版本,然后尝试将其转换为自动化版本,同时确定流程及其关系.我们在此绘制的流程图可用作验证客户捕获需求的媒介.确定满足您需求的软件开发模型在设计开始之前完全捕获并定义需求时,您可以使用"Water-Fall"模型.但是当需求未定义时,可以使用'Spiral'的变体来处理它.未定义需求时,系统会在设计时定义.在这种情况下,您需要在相应的模块中保留足够的空间,以后可以进行扩展.确定要使用的架构.在我的例子中,为了设计我们的文档管理系统(DMS),我将使用ASP.NET MVC和Multitier Architecture(Three Tier Variant)的组合.分析系统并识别其模块或子系统.
一次选择一个子系统并进一步分析它并识别属于该系统部分的所有粒度级别要求.识别数据实体并定义实体之间的关系(实体关系图或ER图).然后可以识别业务实体(某些业务实体直接映射到系统的类)并定义业务流程.组织你的实体.这是您规范化数据库的地方,并决定使用哪些OOP概念和设计模式等.
使您的设计保持一致.在所有模块和层中遵循相同的标准.这包括简化概念(例如,如果您在两个不同的模块中使用两种不同的设计模式来实现相同的目标,然后选择更好的方法并在两个地方使用它),以及项目中使用的约定.调整设计是整个过程的最后一部分.为此,您需要与项目团队召开会议.在那次会议中,您需要向您的团队展示您的设计,并让他们提出有关它的问题.以此为契机,诚实地评估/调整您的设计.