具有2个服务的存储库模式& 2个数据访问层 - C#DDD?

时间:2009-04-01 09:14:04

标签: c# frameworks entity repository-pattern

任何人都可以提供帮助,我有2个应用程序,它们几乎相同。它们具有完全不同的表示层(Web),业务逻辑和数据库几乎完全相同。基本上一个应用程序有一些事情,而另一个没有。

所以我想知道我是否可以在不违反任何规则的情况下执行以下操作

每个应用都有自己的表示层 每个应用程序都有自己的服务层 每个应用都有自己的数据访问层 每个应用程序共享另一个服务层。

因此,两个应用程序都可以访问共享服务层,因为业务逻辑是相同的,但它们都有另一个服务层,其中有5或6个特定于该实际应用程序的方法

数据访问层 - 我没有看到分享这个,因为有2个不同的db与实体框架,因此它在那里得到了EDM,所以它不是动态的 - 而且表略有不同。

我可以在共享数据访问层使用IOC,我想

任何人都可以帮助或评论天气这是一个很好的做法..我不想做的是当很多共享时只有一个单独的服务层..

这是个好主意吗?也许我弄错了,有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

如果业务逻辑大部分相同,那么您应该首先关注这个问题。 如果您想要进行DDD,那么您应首先识别您的实体和(业务)服务,并将它们放在一个库中。

这些实体和业务服务应与您的基础架构层(您的DAL)进行通信。 如果这两个应用程序中的基础结构层非常不同,那么尝试使用接口。因此,使用接口包装intfrastructure层,并且只通过这些接口从域层到基础架构层进行通信。

要将业务逻辑绑定到基础架构的实现,您可以使用IoC / DI。

答案 1 :(得分:1)

正如Arjen de Blok所说,您的业务实体应该使用存储库,存储库是一个对象,其中包含查询,更新或插入域实体的方法。

描述您的存储库的界面属于您的域层,但该实现属于基础架构层(DAL)。

您可以在两个项目之间共享域和基础结构库。如果这两个项目应该通过共享Web服务或共享数据库检索它们的数据,您只需选择(即注入)正确的存储库实现(您的域对象只知道存储库的接口,而不是具体的型)

答案 2 :(得分:0)

您可以使用Repository接口统一DAL。然后,您可以跨项目实现接口。您最终可能还会获得EF Repository基类。您可以将类似的技术应用于服务,利用通用接口,然后专门化服务实现。