我使用MVC和EF创建具有多个图层的示例Web应用程序。我也使用Repository Pattern进行数据库访问。我只是具有MVC4 EF和存储库模式的N层体系结构
的层
大学生创业
- 拨打存储库和执行业务逻辑。
学生资料
- 实体POCO
- 实体上下文
- 实体库
Student对象
- 包含了使用NInject域对象
- MVC Web应用程序
- 实体控制器(这里实例化服务后)
- 我绑定的所有接口(这个项目包含所有其他层的引用)。
我需要帮助在这个设计的优点和缺点。
我使用MVC和EF创建具有多个图层的示例Web应用程序。我也使用Repository Pattern进行数据库访问。我只是具有MVC4 EF和存储库模式的N层体系结构
的层
大学生创业
学生资料
Student对象
我需要帮助在这个设计的优点和缺点。
除了adv。和优点。 (http://www.codeproject.com/Articles/430014/N-Tier-Architecture-and-Tips#nAdvantages)是N层定义的,我会根据我最近与类似的架构经验包括几个要点:
好处是:
由于控制器是薄层和业务逻辑都存储在实际服务,您可以共享不同用途的服务项目,例如Windows桌面等。您也可以在将来为Webapi公开相同的服务。因此可用性很高。
当您在关注NInject的接口时,您可以使用Mocks for TDD。因此,您可以在列表中添加TDD和DI优点。
代码首先是很好的方法来表示你的数据库,它是干净和透明的方法。你知道发生了什么事。
数据库版本控制通过Code首先是最大的卖点。
缺点:
即使你在逻辑上分离这些组分,但你不能单独部署这些组件。因此,通过适当的会话处理可以实现缩放。因此更多的工作。
CS文件过多,每个控制器(1或2),服务(1接口和1类),存储库(1接口,1类)一个。因此,取决于您的应用程序,它将会广泛地增长。我已经有超过100个文件可以管理。但在Resharper的帮助下,你可以摆脱这个缺点并将其转化为你自己的好处。
尽管您可以为存储库,控制器以及服务编写通用CRUD操作。将有一段时间,你会最终会使得每个控制器有它自己的服务等等的路径...
如果你先用Code创建POCO,那么你肯定需要理解Migration;我仍然在努力寻找许多答案。
对于代码优先的DbContext,没有直接和简单的方法来调用函数(就像你在导入函数中,在Database first - edmx中使用sp)。它很干净,但有很多可能需要的破解。
Like Code首先为您创建数据库,因此数据库管理不需要版本控制。不过,我觉得复杂的是处理部署,视图,功能,sp;需要编码。
就性能而言,我想这将归结为您如何编写代码。
总的来说,我对我的Webapi完全一样的架构,我对这个架构感到非常满意。
感谢您的详细解释... – DON 2014-09-27 13:33:25