当前位置:  开发笔记 > 编程语言 > 正文

在构造函数中应该完成多少工作?

如何解决《在构造函数中应该完成多少工作?》经验,为你挑选了5个好方法。

应该在构造函数中执行可能需要一些时间的操作,还是应该构造对象然后稍后进行初始化.

例如,当构造表示目录结构的对象时,应该在构造函数中完成对象及其子对象的填充.显然,目录可以包含目录,而目录又可以包含目录等.

这个优雅的解决方案是什么?



1> Oddthinking..:

总结一下:

至少,构造函数需要将对象配置为其不变量为true的点.

您选择的不变量可能会影响您的客户.(对象是否承诺随时可以访问?或者仅在某些状态下?)构建者可以预先处理所有设置可能会使生活更简单为班级的客户.

长期运行的构造函数本身并不坏,但在某些情况下可能会很糟糕.

对于涉及用户交互的系统,任何类型的长时间运行方法都可能导致响应性差,应该避免.

延迟计算直到构造函数之后可能是有效的优化; 可能结果是没有必要执行所有工作.这取决于应用,不应过早确定.

总的来说,这取决于.



2> SoapBox..:

您通常不希望构造函数进行任何计算.使用该代码的其他人不会期望它比基本设置更多.

对于你正在谈论的目录树,"优雅"的解决方案可能不是在构造对象时构建完整的树.相反,按需构建它.使用你的对象的人可能并不真正关心子目录中的内容,所以首先让你的构造函数列出第一级,然后如果有人想要下降到特定的目录,那么在他们请求时构建树的那一部分它.



3> Johannes Sch..:

所需的时间不应成为不将某些东西放入构造函数的理由.您可以将代码本身放入私有函数中,并从构造函数中调用它,只是为了使构造函数中的代码保持清晰.

但是,如果您想要做的事情不需要给对象一个定义的条件,并且您可以在以后第一次使用时执行这些操作,这将是一个合理的论据,可以将它放出来并在以后执行.但是不要让它依赖于你的类的用户:这些东西(按需初始化)必须对你的类的用户完全透明.否则,对象的重要不变量可能很容易破坏.


Foredecker:它是关于类的语义:MutexLocker可以等待任意长时间,直到资源可用,因为这是构成MutexLocker的不变量(析构函数被调用的时间=资源所有).

4> KeithB..:

这取决于(典型的CS答案).如果您在启动时为长时间运行的程序构造对象,那么在构造函数中执行大量工作就没有问题.如果这是预期快速响应的GUI的一部分,则可能不合适.与往常一样,最好的答案是首先尝试最简单的方式,从那里进行配置和优化.

对于这种特定情况,您可以对子目录对象进行延迟构造.仅为顶级目录的名称创建条目.如果访问它们,则加载该目录的内容.当用户演示目录结构时再次执行此操作.



5> Hugo..:

构造函数最重要的工作是为对象提供初始有效状态.在我看来,构造函数最重要的期望是构造函数应该没有副作用.


"没有副作用"太强大了.例如:信号量的构造函数可能会阻止其他实例完成构造.这种副作用就是它的作用.另一个构造函数可能会自动从(全局或类拥有的)递增计数器为对象分配唯一的id.这也是一种合法的副作用.
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有