Ben*_*Ben 8 asp.net-mvc repository-pattern
我即将开始开发中型ASP.Net MVC应用程序.我正在努力使设计正确.我打算有以下几层:
我将使用Unity作为我的IOC容器,使用EF4.1 Code First进行数据访问.
该应用程序将分为几个程序集.我在确定需要哪些程序集以及放置以下内容时遇到问题:
我的问题是:你通常如何拆分你的?为什么?
编辑:由@TheHurt的回答提示.
如何在组件之间引用,即哪个组件将引用哪个组件?
这就是我可能解决的方法:
应用程序UI组件:
应用程序存储库组件:
应用程序存储库.SQL:
应用程序服务组装:
应用程序服务实施:
应用程序通用:
有几个问题我仍然在努力解决。当您跨越服务边界时,您会丢失来自 EFCF 的数据注释。因此,您必须进行服务器端验证,或者必须使视图模型验证与存储库实体保持同步。感觉越是有层次的东西,越是违反了DRY。我认为当您的视图模型不直接映射到您的实体时,这对于课程来说是正常的。您可以将视图模型作为 DTO,并将它们放入 Common 程序集中,但如果您需要对服务进行超级灵活,那么这似乎将事情耦合得太紧密。
编辑
如果您希望将 WCF 集成到混合中,您可能希望创建非常接近 MVC 视图模型的数据协定(或使用协定作为视图模型)。您可能不会向全世界公开该服务,因为该服务特定于您的 MVC 站点的实现,启动另一个服务供公众使用。如果您正在执行 WCF 服务,您可能希望将所有业务逻辑都包含在服务中,控制器将只处理导航逻辑。
旁注,我尝试尽可能远离“金属”,同时开发一种设计,使我能够在将来将代码分离到各个层。如果我无法用一张纸向经理清楚地解释各个系统层,那么设计很可能过于复杂。如果设计得当,大部分内容在 Visio 中看起来都会很漂亮。
至于事物如何相互引用:UI 将引用 Serivce(或服务实现,这可能不需要。只需将其全部放在同一个位置即可。)。服务引用存储库。存储库实现不引用任何内容,因为它是由 IOC 加载的。一切都参考通用。
| 归档时间: |
|
| 查看次数: |
653 次 |
| 最近记录: |