2

我使用MVC和EF创建具有多个图层的示例Web应用程序。我也使用Repository Pattern进行数据库访问。我只是具有MVC4 EF和存储库模式的N层体系结构

的层

  1. 大学生创业

    • 拨打存储库和执行业务逻辑。
  2. 学生资料

    • 实体PO​​CO
    • 实体上下文
    • 实体库
  3. Student对象

    • 包含了使用NInject域对象
  4. MVC Web应用程序
    • 实体控制器(这里实例化服务后)
    • 我绑定的所有接口(这个项目包含所有其他层的引用)。

我需要帮助在这个设计的优点和缺点。

回答

1

除了adv。和优点。 (http://www.codeproject.com/Articles/430014/N-Tier-Architecture-and-Tips#nAdvantages)是N层定义的,我会根据我最近与类似的架构经验包括几个要点:

好处是:

  • 由于控制器是薄层和业务逻辑都存储在实际服务,您可以共享不同用途的服务项目,例如Windows桌面等。您也可以在将来为Webapi公开相同的服务。因此可用性很高。

    • 每个图层都在做自己专门的工作,并且在NInject的帮助下,您可以轻松地交换相同的图像。我在当前项目中有一个很好的示例,其中针对调试模式,我将Exchange Online服务用于邮件网关。而对于发行版,我必须使用SMTP服务作为邮件网关。 (请分别检查DI adv。缺点)。
  • 当您在关注NInject的接口时,您可以使用Mocks for TDD。因此,您可以在列表中添加TDD和DI优点。

  • 代码首先是很好的方法来表示你的数据库,它是干净和透明的方法。你知道发生了什么事。

  • 数据库版本控制通过Code首先是最大的卖点。

缺点:

  • 即使你在逻辑上分离这些组分,但你不能单独部署这些组件。因此,通过适当的会话处理可以实现缩放。因此更多的工作。

  • CS文件过多,每个控制器(1或2),服务(1接口和1类),存储库(1接口,1类)一个。因此,取决于您的应用程序,它将会广泛地增长。我已经有超过100个文件可以管理。但在Resharper的帮助下,你可以摆脱这个缺点并将其转化为你自己的好处。

  • 尽管您可以为存储库,控制器以及服务编写通用CRUD操作。将有一段时间,你会最终会使得每个控制器有它自己的服务等等的路径...

    • 我发现,验证将无处不在,但我认为它已经任何N层的情况。
  • 如果你先用Code创建POCO,那么你肯定需要理解Migration;我仍然在努力寻找许多答案。

  • 对于代码优先的DbContext,没有直接和简单的方法来调用函数(就像你在导入函数中,在Database first - edmx中使用sp)。它很干净,但有很多可能需要的破解。

  • Like Code首先为您创建数据库,因此数据库管理不需要版本控制。不过,我觉得复杂的是处理部署,视图,功能,sp;需要编码。

  • 就性能而言,我想这将归结为您如何编写代码。

总的来说,我对我的Webapi完全一样的架构,我对这个架构感到非常满意。

+0

感谢您的详细解释... – DON 2014-09-27 13:33:25