2013-02-07 34 views
5

我为MVC4 webapp + EntityFramwork5开发了三层体系结构。 我想保留图层,所以只有DAL知道我正在使用EF,例如。ASP.NET MVC4 n层体系结构:最佳方法

其实我有很多的类来管理:

DAL

  1. 实体PO​​CO
  2. 实体的DataContext:的DbContext
  3. 实体库

BL

  1. 实体视图模型
  2. 实体服务(实例化实体库)

WEB

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

这是工作但很难维持。我正在考虑删除DAL中的Entity Repository并直接使用DataContext(如果我没有错,毕竟DbContext已经被设计成一个Repository和一个工作单元),但是这会迫使我添加一个引用EntityFramework.dll在我的BL。这不是一个大问题,但我不确定这是不是最好的选择。

有什么建议吗?

(我希望我给了足够的信息,如果你需要更多的,只是问)

+0

我不太清楚为什么你提到它很难保持你的项目。你认为什么层面难以维护? –

+0

例如,如果我添加一个字段到POCO,我需要更新datacontext(并非总是),dal存储库,BL视图模型,BL服务..不是很少......但可能是必须的这个结构(或者设计错误) – Davide

+1

hi @Davide,你也可以为你的项目应用一些GOF设计模式。例如,如果你可以添加一个字段到POCO,你可以使用“Builder”模式:)。 –

回答

5

您可以使用thisthisthis文章。

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 

申请。这样的建筑师可以使用他们的经验来加速 的过程。由于我之前已经完成了类似的网络应用程序,并且已经了解了我的可交付成果,因此我将采用更快的方法来获取我们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 

的努力,我会尝试定义系统的第一 手动版本,然后将试图将其转换到自动版本,而 识别过程及其相互关系。我们在此绘制的流程图 可以用作验证 与客户的捕获要求的媒介。 确定符合您要求的软件开发模型 在设计开始前完全捕获和定义需求时,您可以使用'水流'模型。但是,如果要求不明确,则可以使用“螺旋”变体来处理 。 当需求没有被定义时,系统在设计时被定义。在这种情况下,您需要在各个模块中保留足够的空间 ,这些模块可能会进行后期扩展。 决定使用什么架构。就我而言,为了设计我们的文档管理系统(DMS),我将使用ASP.NET MVC和多层体系结构(三层变体)的组合。 分析系统并识别其模块或子系统。
每次选择一个子系统并进一步分析并识别属于该系统的所有粒度级要求。 识别数据实体并定义实体之间的关系(实体关系图或ER图)。这可以通过 后面的标识业务实体(某些业务实体 直接与您的系统的类别对应)并定义业务流程 。 组织你的实体。这是您规范化数据库的地方,并决定使用哪些OOP概念和设计模式 等。
使您的设计保持一致。遵循所有模块和图层的相同标准。这包括简化概念(如 示例,如果您在两个不同的模块中使用了两个不同的设计模式来实现相同的目标,则选择更好的 方法并在两个地方使用该方法)以及 项目。 调整设计是该过程的最后部分。为了做到这一点,您需要与项目团队开会。在那个 会议中,你需要向你的团队展示你的设计,并让他们询问 关于它的问题。以此为契机,诚实地评估/调整您的设计。

+0

请您清楚地说明,这是您首次参考的长篇引文,还包括编号列表?谢谢。这是一件好事,你没有给出只有链接的答案。 –