使用asp.net mvc问题的域层+存储库层

时间:2011-01-16 20:22:55

标签: c# asp.net-mvc dns repository data-access-layer

关于我的域层/域服务的简单问题......我是否应该允许此层具有对数据库的只读访问权限?即挂钩IReadOnlySession并只允许存储库层访问CRUD,即持久性?或者,存储库层是否应该使用服务层调用存储库层来执行ReadOnly和CRUD?

我发现有一件事很奇怪,为什么服务层大部分时间只是直接调用Repo,因此问题 - 将ReadOnly移出到域服务层。

修改

我决定在我的应用程序中有3层(对于我对我所做的事情感兴趣的任何人),第一层是WebUI(我将共有3个,业务需求),下面是域服务即所有业务规则,验证,检查用户是否可以执行操作x,用户是有效用户,调用数据的仓库。最后一层是Repository Layer,即与数据库迭代的层,我使用LinqToSql,我的所有CRUD和ReadOnly逻辑都驻留在这里。作为旁注,我创建了另一个名为Model的项目,这是实际的LinqToSql模型实体,即Product,Item,Shop,Customer等。这个项目由UI,Domain Service和Repo引用,使我免于编写DTO,以及有希望的复杂性。

2 个答案:

答案 0 :(得分:2)

在您的应用程序中,只有一个“图层”应该与数据库通信。

在Repository模式中,它是Repository。

无论是CRUD还是ReadOnly都无关紧要,它应该通过存储库到达数据库。

答案 1 :(得分:0)

我认为讨论是这些层的责任。存储库显然是为数据库提供抽象。正确完成并且存储库的用户无法判断您是否使用SQL Server,mysql或文件来执行持久性。该层必须具有所有必要的crud操作。

服务层是另一种抽象。它可能依赖于存储库的持久性。通常会有更多的业务逻辑。可能是跨存储库问题或另一个数据流(例如gps)。

某些应用不需要服务层。在您需要之前不要添加它。如果你确实需要服务层,那么让它成为一个围绕repo暴露读/写的细长说唱者,可以让你的模型只有一个直接依赖。

相关问题