2017-01-23 33 views
0

我有3个项目(C#)API,BLL和DAL。 DAL引用DAL和API引用BLL。在我的API中不使用DAL而使用BLL函数

enter image description here

enter image description here

在我的API,我需要使用所有的CRUD功能,但因为VS表示,“类型‘布拉布拉’的定义我无法从我的BLL使用功能未引用的程序集,您需要添加引用(DAL)“,但我不想在API项目中引用DAL。有没有办法做到这一点,而不使用我的DAL项目?

+2

如果BLL依赖于它,则必须引用DAL您的主项目。否则,BLL将如何找到要调用的函数? DAL的编译代码将会丢失。这就是它的工作原理,没什么可担心的。 – ADyson

+0

但是BLL应该在某处使用DAL吗? – McNets

+0

@ADyson我的BLL项目使用DAL,但为什么我应该在API中添加对DAL的引用,如果我引用BLL呢? –

回答

1

在我看来,你试图达到的是设计这个项目的好方法。我也是这样做;只是我将在下面解释的小差异。在API中不引用DAL可确保每次对DAL的调用仅通过BLL进行。这是必要的,因为我想把我所有的数据处理逻辑放在一个地方。如果它是分布式的,很难找到问题。

我有四个项目:

  1. utils的(你的 “布拉布拉” 的东西放在这里)[参考没什么]
  2. DAL(你的数据库的东西放在这里)[参考文献的Utils]
  3. BLL(您逻辑的东西放在这里)[参考DAL和utils的如果需要的话]
  4. API(API的东西放在这里)[参考BLL和utils的如果需要的话]

这是一种参考链。 DAL => BLL => API。相反的顺序不应该存在。 Utils应该是常见的东西,例如实体声明,例外,枚举应该去的地方。

注意:尽管您没有在API中引用DAL,但您必须部署它。

为避免在API中使用Utils,您可能需要添加一层DTO并将它们与实体进行映射。请参考我的其他question

相关问题