尝试在我的新应用程序套件中构建一个基本的3层架构。第一次,我想开始应用最佳设计实践(比如IoC/DI e.t.c)。
我的UI层必须创建一个BLL对象才能完成它的工作。
假设我的UI需要调用BLL 10次。我必须创建我的BLL对象10次,还是必须在加载表单时创建一次?
发布于 2012-12-12 21:19:51
为了完成它的工作,我的UI层必须创建一个
对象。
首选的做法是在创建时或稍后通过属性将业务层对象的接口注入到GUI表单中。在这种情况下,您的表单对业务层对象一无所知,不需要实例化它们,只做它应该做的事情- GUI交互。
就我个人而言,我更喜欢构造函数注入:
public class MyForm
{
private IDocumentStorage documentStorage;
private IJobsRegistrator jobsRegistrator;
public MyForm(IDocumentStorage documentStorage, IJobsRegistrator jobsRegistrator)
{
this.documentStorage = documentStorage;
this.jobsRegistrator = jobsRegistrator;
}
}其中IDocumentStorage和IJobsRegistrator是您的业务层接口。如果有一些限制(比如,你只能使用无参数的构造函数),你可以使用属性setter。
发布于 2012-12-12 21:24:05
在每次调用时重新创建业务对象是很正常的。这有助于维护一个无状态的应用程序,如果你正在制作一个基于HTTP的网站,这就是你想要的。
如果这是由于一些真正的重量级对象造成的问题,您可以采取一些措施,比如创建对象缓存/池,或者将内容保存在会话对象中。除非你觉得有必要,否则不要去那里。
发布于 2012-12-12 21:23:07
嗯..。如果你期望得到一个直截了当的答案,那么你就会失望。答案是--视情况而定。
如果你的对象是一个无状态的轻量级对象--如果它能让你的生活变得更容易,那就去创建它吧。
另一方面,如果您的对象必须维护状态,或者需要大量资源来创建它,则必须将其创建为单例,并使用创建/管理单例所需的所有开销。
DI容器支持这两种场景,但您可以根据自己的场景选择合适的场景
https://stackoverflow.com/questions/13840640
复制相似问题