9

背景:我注意到在许多项目中,几乎所有内部​​代码中的类都是公共的而不是最终的,即使它们不需要。但是,对我来说,不默认做出这个决定似乎是明智的,而只有在它们实际上打算从系统的其他部分使用时才公开类。拥有包保护类是一种在模块之间强制执行边界的简单机制,并用作关于类的预期用途的文档。

如果有一个(最好是免费的 :-) 工具来保护所有可以在不破坏程序的情况下受到保护的类,并且可能使所有没有子类的东西成为最终的,那么这将是开始有意识地使用保护机制的一个很好的起点。(当然你需要在之后进行调整。)你知道这样的工具吗?

警告:我知道有更好的模块化机制,比如 OSGI 和计划中的超级包等等。但是在许多当前的项目中,这不是一个选项,使用普通的旧 Java 机制是您可以轻松做到的。此外,这仅在您共享代码所有权(这样每个人都可以根据需要将内容更改回公共)并且如果您正在开发最终产品而不是供他人使用的库时才有效。我也不太确定最终确定的好处——这可以防止 AOP 和嘲笑。

澄清:正如我所说,我不是在谈论将库扔给无法更改的人,而是在鼓励每个人根据需要更改和重构所有内容的中型项目的内部代码。当我谈论受保护的包裹或最终将其视为“受到保护,直到有人感到迫切需要解除这些限制”。如果有人觉得有必要解除该工具设置的限制,欢迎他这样做。

4

2 回答 2

2

即使有这样的工具,(没有),一个好的程序员也不会使用它......访问规范是程序员自己最好理解和解决的设计问题。想一想……你制作了一个程序并运行该工具并整理好所有东西(假设该工具首先是超级智能的,可以真正理解你的程序)……然后你决定修改它……扩展一些类, 等等.. 你最终会扩展最终类并制作私有类的对象.. (这些只是你将面临的众多问题中的一小部分)......

事情是……当工具完成它的工作时,你甚至不再理解你自己的程序。

底线..停止寻找解决您的设计问题的工具..(就像要求可以自​​动调试您的程序的工具一样)

于 2012-10-26T14:28:46.287 回答
1

您可以从 Eclipse 中查看ATL 。虽然 ATL 用于创建不同类型模型之间的模型到模型转换,但没有限制源模型和目标模型不是同一类型。您可以创建从 Java 到 Java 的转换,使您当前的类受保护或最终。MoDisco是 Eclipse 的一个工具集,它利用了它,如果您想查看示例。

于 2012-10-29T07:22:00.063 回答