我已经使用MVC框架有一段时间了,我非常喜欢它将关注点分离的功能。但是我养成了一个坏习惯,让控制器做了很多工作。所以我真的需要一些建议。
当我第一次使用MVC时,我经常让控制器对数据库操作后的模型进行操作。我知道这是不好的,所以我将这项工作移至模型中。然而,我对此并不满意,因为我希望我的模型非常简洁。
我阅读了一些资料,发现人们通过引入服务层来保持控制器和模型的简洁性,我很喜欢这个想法。
我只是想了解服务层和仓储库应该如何协同工作。以下是我的假设,请告诉我这是否是一种良好的工作方式?
- 如果数据不需要进行任何操作,则控制器可以直接调用仓储库,因此不需要涉及服务层。
- 如果需要对数据进行任何操作(业务逻辑),则应在服务层中执行,并且控制器将根据需要简单地调用服务层。
- 一旦服务完成其业务逻辑,就会根据需要使用仓储库(如果需要持久化数据)。
- 最好将模型保持简洁,仅充当DTO(数据传输对象)。
- 使用MonoRail验证属性可以在模型中进行数据验证。我明白没有人喜欢在模型中添加许多属性,但这是另一个讨论。我喜欢MonoRail的验证属性之所以有益,是因为它可以自动验证jQuery在用户界面上的内容。
我试图将所有代码都转变成单一责任原则,因此试图整理我的编码实践。
谢谢