我的控制器将请求转交给相应的服务。然后,服务调用各种存储库。存储库仅将Linq用于Sql实体,用于DataAccess,然后映射并返回为域对象。然后,该服务决定Controller将呈现的内容,并将DO替换为Presentation对象,这些对象将返回到Controller以在View中显示。
我有服务 - 存储库 - 域对象 - 演示文稿对象
我在问,因为看起来我有很多对象,有些人除了传递数据之外什么都不做。这是一个合理的场景还是我没有遵循适当的MVC模式?
答案 0 :(得分:2)
如果您的应用程序足够大,那么您的模式就有意义了。否则,我闻到过度工程......
问问自己:如果这一层不存在怎么办,你会发现它是否真实。
答案 1 :(得分:2)
是的,你有正确的想法。它可以是很多类和接口(甚至不计算单元测试和模拟/测试类),但是如果你有一个体面的应用程序,那么你仍然有很多诽谤。但是首先要做的是,初期收益不是很多。
我已经看到项目跳过了一些基本服务的服务实现,这些服务只是传递到存储库而没有服务添加任何值。他们从控制器直接进入存储库,似乎没有太多损失。
通过尽可能使用工具,还有其他方法可以减轻某些类的负担。例如,像AutoMapper这样的项目可以帮助简化您的域对象以查看模型映射。
答案 2 :(得分:1)
我有一个非常相似的情景。最初我的项目有UI,控制器,服务层和存储库。我的单元测试包括服务层和存储库(过滤器),在某些情况下单元测试也做同样的事情(因为服务层有时会传递到存储库)。
由于大型重构,我删除了服务层,这给了我很大的灵活性,控制器直接处理存储库并应用过滤器来获得我想要的。
我遇到的一个问题是你无法序列化Linq2Sql对象,因此有时必须将这些对象转换为表示对象。