依赖注入和UI组织化
本文关键字:组织化 UI 注入 依赖 | 更新日期: 2023-09-27 17:58:49
在UI按钮点击中,我必须实例化一个DAL对象,然后才能实例化一个BLL对象。这似乎很麻烦,在对象本身之前创建对象依赖项(比在BLL内部实例化依赖项的代码更多)。这只是使用依赖项注入所要付出的代价吗?
实例化BLL所需的准备工作在UI中,这让我很恼火。这是进行依赖项注入的正确方法吗?有没有一种方法可以干净地分离UI和BLL准备逻辑?
class DAL{
//Data access layer
}
class BLL{
public BLL(DAL dal){
this.dal = dal;
}
private DAL dal;
}
buttonRun_Click(object sender, EventArgs e){
DAL dal = new DAL();
BLL bll = new BAL(dal);
bll.DoStuff();
}
如果需要动态创建这些BLL对象,我会使用工厂对象。UI可以将工厂注入其中,或者如果您没有在那里使用注入,则可以在构造函数中实例化它。
buttonRun_Click(object sender, EventArgs e){
BLL bll = balFactory.Create();
bll.DoStuff();
}
然后,工厂对象负责实例化BLL的一个实例,并确切地知道如何做到这一点。
但是,如果你不需要每次点击都有一个新的实例,为什么不直接在UI中注入一个BLL实例呢?
构造函数链接(较差的人工依赖注入)
public Bll() : this (new Dal()) { }
public Bll(IDal dal) // to provide other IDal implementations if needed
{
this.dal = dal;
}
的工厂方法
private Bll() { }
public static Bll Create()
{
IBll bll = new Bll();
bll.Dal = new Dal();
return bll;
}
使用IoC工具的依赖性注入(在互联网上搜索,这方面的框架很多,要么使用基于配置的XML注入,要么使用语言连接…-寻找Castle Windsor、Spring.Net、Unity、StructureMap、Autofac、Ninject…)。建议使用一些更高级的设计模式/应用程序架构(例如,一些MVC变体,这样您就不会在演示事件处理程序中实例化对象),尽管您已经开始通过分离DAL、BLL等来开发一些好的代码。。。阅读:GoF设计模式和应用程序架构的概述