我一直在使用MVC框架一会儿,我真的很喜欢这些问题是如何分离出来的。我已经陷入让控制器做很多工作的坏习惯。所以我真的在寻找一些建议。服务层和存储库
当我第一次开始使用MVC时,我经常让控制器在数据库工作完成后对模型进行操作。我知道这很糟糕,所以搬到模型中。不过,我并不满意,因为我希望我的模型能够很好地学习。
我已经做了一些阅读,我发现人们通过拥有一个服务层保持他们的控制器和模型精益,我喜欢它的外观。
我只是想了解服务层和存储库应该如何一起工作。这是我的假设,你能否让我知道这是否是一种好的工作方式?
- 控制器可以直接调用库中,如果没有操作需要对数据和作为这样一个服务层完成并不需要涉足
- 一旦任何工作需要做数据(业务逻辑),那么这应该在服务层中完成,并且控制器将根据需要对服务层进行简单调用
- 一旦服务完成它的业务逻辑,它就会根据需要使用存储库(如果数据需要坚持)。
- 理想情况下,模型应该保持精益,理想情况下只能作为DTO使用
- 验证数据将在模型内完成(使用MonoRail验证属性)。我很欣赏,即使人们喜欢用很多属性来污染他们的模型,但这是一个不同的讨论。我喜欢MonoRail的验证属性在UI中自动jQuery验证的好处。
我想把我所有的代码都转到单责任原则,因此试图理清我的编码实践。
谢谢
我有把业务逻辑模型中唯一担心的是,通过属性包(或不过)传递的模型集合时的UI,你可能开放的业务逻辑的用户界面。 – 2008-11-28 20:43:50
我同意你的意见,我只是觉得过多的业务逻辑应该存储在一个单独的服务层。尽量保持您的模型,视图和控制器尽可能小 – StevenMcD 2008-11-28 22:35:29