Java Architecture - 是否应该在构造函数中传递常用的类?

标签 java design-patterns architecture

我正在用 Java 设计一个 GUI 桌面应用程序,它有一个选项卡式界面(就像浏览器中的选项卡一样)。

MainWindow 类创建选项卡式窗口,加载具有每个选项卡代码的其他 SWT 类,例如Tab1CompositeTab2Composite。还有处理工具栏菜单操作的类,因此依赖于 MainWindow 进行本地化(捆绑)、在选项卡之间切换等。

到目前为止,我一直在将构造函数中的 MainWindow 实例传递给其他类。这似乎是“良好做法”,但我不禁注意到,如果我将所有必要的变量和方法设为静态,我的代码会简单得多。

关于我应该使用哪种方法有什么想法吗?

最佳答案

“良好实践”意味着编写可以被理解、重用和扩展的代码。有时快速而肮脏的做法更有意义,但代码通常比我们预期的生命周期更长、更难,即使不正确,正确地做也是一种很好的做法。

您的主窗口是一个很好的起点。是很多地方都需要的一组数据。将其“通过 9 个中间层”向下传递的必要性看起来很尴尬,但很明显,这 9 层方法中的每个,被认为是一个有凝聚力的整体,确实需要 MainWindow 中的信息。使用全局变量会隐藏这种需求,并且是对任何试图维护或增强代码的人开的恶作剧。

但是,MainWindow 还会创建窗口和选项卡等等。这不需要传递下去,所以我会创建另一个类来传递信息。这简化了事情。我们 future 的维护人员(可能是你)看着从第 4 层到第 5 层的调用,不再需要纠结为什么第 5 层需要创建选项卡。制作几个这样的类以最大限度地减少不需要的信息量可能是有意义的。

下一步是注意实际使用此信息的对象不知道或不太关心 MainWindow。随着时间的推移,它们可能会被用在完全不同的程序中,或者它们可能会在这个程序中以不同的方式被使用。 他们得到的信息可能不是来自MainWindow。他们想要的不是类实例,而是接口(interface)实例。切换到接口(interface),您的代码将变得更简单、更灵活。

最好不要对这一切太得意忘形。我的意思不是说你现在应该做很多工作。相反,如果您的项目继续顺利进行,您需要牢记自己的方向。

(请注意,公共(public)字段和静态方法不能与 Java 接口(interface)一起工作!避免使用它们。)

关于Java Architecture - 是否应该在构造函数中传递常用的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6734750/

相关文章:

java - 一个物理项目中的两个逻辑 java 项目

java - Android - 找出用户当前处于哪个上下文/Activity 中?

java - 使用重定向生成代码 IntelliJ Idea 15

java - Winrun4j:超过最大类路径大小

C#编码模式问题

ios - Model View Presenter 和 iOS (Swift) 架构

java - 依赖于 dll 的可执行 Jar

java - 创建扩展 javax.ws.rs.core.Application 的可重用 "base"类

model-view-controller - 在理想的MVC中, View 应该知道模型吗?

asp.net - ASP.NET网站+ Windows窗体应用程序+ WCF服务:客户端凭据