天哪,我讨厌Java中的enum
。 (嗯,我不知道,但是引起您的注意不是!!)
这是一系列简单的事件,得出一个奇怪的结论:
- 我们有一个可以根据配置进行处理的组件
- 我们决定将它可以执行的不同操作放入一个
enum
以便我们控制有效值 - 从相关因素的代码
enum
的算法来处理每个操作进入到同一库作为enum
(或并行库,它并不重要) - 系统的更多角落使用基于配置的处理,因为它很好
- 因此,我们向
enum
添加了更多操作 - 而且图书馆越来越大
- 并包含整个系统使用的特定功能
- 他们彼此之间没有特别的关系
不知何故,这里的开发过程违反了开放-封闭原则。
功能磁铁
我们发现自己面临的问题是,流行的机制必须积累每个人的特征才能完成工作。 这是因为它的构建方式意味着每次需要扩展时都需要进行修改。
在Java之类的语言中, enum
是约束一组值的必经之地,很容易陷入上述陷阱。 您将如何确保所有可能的操作名称都是唯一的,并且只能解析有效的操作? 但是,如果完全集中化此机制,最终将吸引无关的关注。
简短的答案是, enum
用于一组封闭的值。 对于更开放,可扩展的机制,您还需要其他一些东西。 扩展核心技术时,应通过组合而不是修改来进行扩展。
其他磁性能
通常,是由于设计不良或流行(或两者兼而有之),导致域从中央问题空间之外获取收益。
如果开发团队在构建某些东西方面做得特别出色,那么用户通常会要求将更多功能集成到系统中。 这可以导致厨房抽屉应用程序,其中充满了很多无关的东西,这很有用。
这样的磁体比它们的维护和重组更容易构造。
小心被吸引到的东西!
翻译自: https://www.javacodegeeks.com/2020/03/the-feature-magnet.html