我试图构建遵循最佳实践方法我最后的相当大的MVC项目,但没有听明白我在做什么。
它有一个数据,业务和网络(MVC)项目,但控制器包含大部分的代码,数据层使用NHibernate和有责任的事情太多了几个仓库和业务层是什么,没有按垃圾场“T属于在其他两个项目。 它的工作原理,但我觉得它可能是更好的被设置 - 的主要事情,我不高兴是脂肪控制器和存储库。
我开始有可能成长为一个体面的大小一个新的项目,所以我花了一些更多的时间试图让我的设计摆在最前头。 看了多一点,我试图让每个骨料根的存储库,然后在在表示层每个控制器业务层的服务。
我最初的希望是,该代码的大部分将去服务,这再加上更小的存储库将保留我的控制器和数据层较薄。 虽然到目前为止,这是不会发生。
我读过的一切表明,视图模型不应该从业务层返回,并应在表示层进行填充,所以此刻我的服务层主要是通过模型从我的数据层通过表示层,然后做什么它需要准备的视图模型。 所以我还是有脂肪控制器,加上薄薄的业务和数据层。
我的演讲层也知道对我的业务和数据层,但我认为这种分离点的部分是降低耦合?
有我得到这一切错了吗? 我应该停止试图盲目追随什么,我在互联网上阅读,只是在业务层准备视图模型,所以我可以移动的大部分我的代码在那里? 我是不是应该回到传统的ASP? :)
我用的时候我设立一个项目结构的主引导是确保我可以添加一些OperationContract的属性,业务逻辑层,然后主机作为一个WCF服务。
如果我能做到这一点,这意味着商业逻辑层隔离了我的数据层,并且只有把简单的结构和实体与它的客户端交互。 数据层是完全隐藏。
所以我平时的结构是这样的:
Solution
Business.Contracts (interfaces for bll layer in here)
Business.Logic (concrete implementations of contracts in here)
Business.Entities (Pocos that bll uses)
Data.Contracts (interfaces for dal)
Data.Sql (Concrete Sql implementation of contracts)
Common.Enums (Enums needed by all projects)
FrontEnd (Main mvc app)
因此,在这种结构中,我的MVC项目永远只与业务命名空间和公共的命名空间的交易。
然而,当与实体交互,我倾向于使用我自己的模型在MVC项目让我添加注释和前端特定的功能,然后我提供了这些模型,以便能够与业务实体交替使用隐式转换。
HTH