gpt4 book ai didi

c# - 如何避免在 UI 层中引用 DataLayer?

转载 作者:太空狗 更新时间:2023-10-30 01:09:44 26 4
gpt4 key购买 nike

我有一个 3 层的项目。 UI、业务层和数据层。

UI 调用 BL。 BL 调用 DL。 DL 执行数据库操作。就这么简单。

我想对我的 BL 方法进行单元测试,所以我对其进行了一些更改,现在我接受 DL 作为 BL 构造函数中的参数,以便我可以创建 DL 的 Mock 对象。

这让我改变了我的 UI 层,因为我的 UI 调用了我的 BL,并且根据架构规则,我认为如果我将 DL 的引用添加到我的 UI,这不是一个好的设计。

有人可以提出更好的方法吗?我需要更改架构还是我在这里做错了什么?也许我可以在这里介绍门面管理器?我们将不胜感激您的建议示例。

--编辑--

代码如下:

在 BL 中:

    public MyBusinessLayer()
{

}
//To pass mock object of WCF Service
public MyBusinessLayer(ISomeServices svc)
{
someServiceRef = svc;
}

//To pass mock object of Data Layer.
public MyBusinessLayer(ISomeDataLayer dl)
{
someDlRef = dl;
}

在用户界面中:

//To do this i have to add DL reference to UI
MyBusinessLater b = new MyBusinessLayer(new ISomeService());

最佳答案

IoC 非常适合这项工作。你的 BL 应该只依赖一个可以获取它需要的数据的接口(interface)。然后,使用 IoC,向接口(interface)注册实际的 DB 实现。然后 UI 应该被注入(inject)一个接口(interface) BL。因此,当应用程序启动时,您注册了所有依赖项,并且只是将 BL 接口(interface)注入(inject)到 UI 中,因此 UI 并不知道实际的 BL 实现依赖于 DL 接口(interface)。

这只是我在网上找到的例子。只需谷歌搜索 C# IOC 或 C# 依赖注入(inject)。 http://www.dotnetspark.com/kb/266-inversion-control-ioc-and-dependency-injection.aspx

关于c# - 如何避免在 UI 层中引用 DataLayer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6141686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com