首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的用户界面是否会在每次使用时创建业务对象?还是不想?

我的用户界面是否会在每次使用时创建业务对象?还是不想?
EN

Stack Overflow用户
提问于 2012-12-12 21:13:32
回答 5查看 284关注 0票数 0

尝试在我的新应用程序套件中构建一个基本的3层架构。第一次,我想开始应用最佳设计实践(比如IoC/DI e.t.c)。

我的UI层必须创建一个BLL对象才能完成它的工作。

假设我的UI需要调用BLL 10次。我必须创建我的BLL对象10次,还是必须在加载表单时创建一次?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-12 21:19:51

为了完成它的工作,我的UI层必须创建一个

对象。

首选的做法是在创建时或稍后通过属性将业务层对象的接口注入到GUI表单中。在这种情况下,您的表单对业务层对象一无所知,不需要实例化它们,只做它应该做的事情- GUI交互。

就我个人而言,我更喜欢构造函数注入:

代码语言:javascript
复制
public class MyForm
{
    private IDocumentStorage documentStorage;
    private IJobsRegistrator jobsRegistrator;

    public MyForm(IDocumentStorage documentStorage, IJobsRegistrator jobsRegistrator)
    {
        this.documentStorage = documentStorage;
        this.jobsRegistrator = jobsRegistrator;
    }
}

其中IDocumentStorageIJobsRegistrator是您的业务层接口。如果有一些限制(比如,你只能使用无参数的构造函数),你可以使用属性setter。

票数 1
EN

Stack Overflow用户

发布于 2012-12-12 21:24:05

在每次调用时重新创建业务对象是很正常的。这有助于维护一个无状态的应用程序,如果你正在制作一个基于HTTP的网站,这就是你想要的。

如果这是由于一些真正的重量级对象造成的问题,您可以采取一些措施,比如创建对象缓存/池,或者将内容保存在会话对象中。除非你觉得有必要,否则不要去那里。

票数 1
EN

Stack Overflow用户

发布于 2012-12-12 21:23:07

嗯..。如果你期望得到一个直截了当的答案,那么你就会失望。答案是--视情况而定。

如果你的对象是一个无状态的轻量级对象--如果它能让你的生活变得更容易,那就去创建它吧。

另一方面,如果您的对象必须维护状态,或者需要大量资源来创建它,则必须将其创建为单例,并使用创建/管理单例所需的所有开销。

DI容器支持这两种场景,但您可以根据自己的场景选择合适的场景

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13840640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档