2017-03-19 51 views
1

我正在处理由Clients项目(Clients.csproj)组成的C#项目我有一个DAL库从数据库(Products.DAL.csproj)为客户端获取数据。 Inside Products.DAL.SQL.csproj我有一个接口IProductsService,它有一个方法GetProducts()(从MS SQL数据库读取产品)。现在我有要求添加额外的数据源,所以我创建了另一个项目(Products.DAL.Mongo.csproj)。我需要在这个新项目中实现IProductsService接口,但我不想引用Products.DAL.SQL.csproj来获取接口。推荐的方法是什么?作为存储库的合同库

在此先感谢

+0

IProductService是应用程序的DataService。它描述了应用程序如何请求/发送数据。因此,该接口属于应用程序而不属于DAL。 IProductService的具体实现属于DAL –

回答

1

我会做谁拥有所有的业务类和接口的文件夹,这样的命名空间将Products.Core.Business和Products.Core.Interface的一个核心项目。 您只需引用核心项目即可。

这样,您必须在不引用SQL项目的情况下在Products.DAL.SQL和Products.DAL.Mongo中实现IProductService。

[编辑]:

我还要举一个french post约DDD:

您的解决方案将有5层:

  1. 基础设施:服务基础设施(接口)
  2. 存储库:数据访问层和持久性
  3. :域层与实体和业务逻辑
  4. 服务:Web应用程序或谁消耗你的服务客户端应用程序:你的用户
  5. 客户提供服务。
+0

但是,如果DAL引用Core项目,则它立即获得对Core.Business的访问权限,而它仅需要Core.Contracts。 – pantonis

+0

所以我会在这里做的(我假设你正在使用visual studio)是:我将为核心项目创建一个解决方案文件夹,然后在这个文件夹中我将有我的业务,​​合同,...项目 –

+0

I认为把它们分成不同的项目是不错的,特别是如果你有很多项目的话。它提供了更多的可读性并且更易于维护。 –