我们有一个带有DAL的n层架构 - > BL - >用户界面,分离。在我们的DAL中,我们有EF用于数据库访问。
我们要求从其他公司调用外部API。我们已经为我们提供了几个带有库的客户端.DLL文件,以使该过程无缝。
我们正在努力决定.DLL文件应该驻留在哪里。我们应该把它们放在DAL中,然后在DAL中进行调用,因为它是数据访问,或者我们应该把它全部放在BL中并在那里进行外部调用。因此,不要触及DAL并将其隔离,仅用于数据库访问。
非常感谢任何有关此事的建议。
答案 0 :(得分:0)
首先,我们需要清楚提供给我们的外部DLL到底是什么,在大多数情况下,外部dll包含该特定第三方应用程序的业务逻辑。
在我看来,这就是为什么应该保留在你申请的BL中。并因此同意您的上一个声明,将DAL隔离,只是处理数据库操作。
答案 1 :(得分:0)
好的,听起来你应该引用数据访问层上的外部程序集beucase这个程序集的主要对象是检索数据。但是,当您在业务层使用数据访问层时,您也拥有此主体。我会去商业层。鉴于它是逻辑的一部分,那么你应该在那里进行这种访问。
另一点:如果您不熟悉在类库业务层项目中引用此程序集,则可以将其抽象为接口并在业务层上注入(通过IoC示例) 。使用这样的方法,您将把它保留在业务层上并隔离此API的访问权限。
对于示例,将其添加到您的域模型层(如果您使用的是):
public interface IExternalDataService
{
IEnumerable<SomeDto> Getdata();
SomeDto Getdata(object id);
}
在另一个类库项目中,添加程序集的refence并进行API调用,实现此接口:
public class ExternalDataService : IExternalDataService
{
public IEnumerable<SomeDto> Getdata()
{
// consume the API (dll) here...
}
public SomeDto Getdata(object id)
{
// consume the API (dll) here...
}
}
在你的BL课程中,取决于界面:
public class CustomerService
{
public CustomerService(IExternalDataService externDataService)
{
...
}
}