Java SE – 为不同的库模块实现“即插即用”的巧妙方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java SE – 为不同的库模块实现“即插即用”的巧妙方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2692字,纯文字阅读大概需要4分钟。
内容图文
![Java SE – 为不同的库模块实现“即插即用”的巧妙方法](/upload/InfoBanner/zyjiaocheng/734/a15c5ec4b67c4240bc312464c9e92e24.jpg)
我正在努力做一些聪明的事情.我正在创建一个天气应用程序,我们可以在其中使用另一个天气API替换weather API,而不会影响代码库.所以我开始使用包含多个模块的Maven项目.
我有一个包含Interface类和Base类的Base模块. Interface类包含对API的调用(所有调用都是相似的,如果不是精确的),Base类包含API的属性(同样,所有属性都相似,如果不是精确的话).
我为我们正在测试的两个天气API中的每一个都有一个模块,计划在我们开发应用程序时为新的天气API创建更多模块.
最后,我创建了一个Core模块(包括main)来实现我想测试的weather API的特定模块类.
现在,我知道最简单的方法是使用switch语句和枚举.但我想知道是否有更聪明的方法来做到这一点.也许使用模式?有什么建议?
这是我刚才描述的结构图:
这是UML表示:
这对我来说是一个学习过程.我想了解一个真正的Java Guru如何根据指定的配置实现适当的模块和类.
谢谢你的建议.
解决方法:
I’m trying to do something clever. I am creating a weather application
in which we can replace the weather API with another weather API
without affecting the code base.
如果不进一步阅读,这第一个声明让我想到了plugin architecture design,但在软件设计过程中,决策不能匆忙,你拖延的越多,你拥有的信息越多,做出更明智的决定,现在这只是一个想法.
I have a Base module that contains the Interface class and the Base
class. The Interface class contains the calls to the APIs (all calls
are similar, if not exact) and the Base class contains the properties
to the APIs (again, all properties are similar, if not exact).
当不同的模块共享行为/状态时,重构它们并生成基本的抽象类和接口是个好主意,因此您处于正确的轨道上,但是,如果存在差异,则不应将它们重构为基本模块.这背后的原因是简单,可维护性.如果你开始添加if子句或开关来处理这些差异,你刚刚引入了模块之间的耦合,并且无论何时添加/修改其他模块,你都将不得不在基本模块中进行更改,这在所有.
0700表格SOLID principles反映了这一点,该表格规定一个类别应该开放以进行扩展但是关闭以进行修改.
因此,在将常见行为重构为基本模块之后,每个新API都应该像您一样扩展基本模块.
Finally, I have created a Core module (includes main) to implement the
specific module class for the weather API I want to test.Now, I know the simplest way to do this would be to use a switch
statement and enumeration. But I want to know if there is a more
clever way to do this. Maybe using a Pattern? Any suggestions?
实际上,使用开关可以使它工作,但它根本不是一个干净的设计,出于同样的原因,在添加,修改或删除模块时,还需要修改这个模块,而且这个代码也可能打破.
一种可能的解决方案是将此责任委托给新组件,并使用像Abstract Factory这样的创建设计模式,它将提供一个实例化组件的接口,而无需指定其类.
至于架构,到目前为止,插件架构仍然有意义,但如果不同模块扩展基础合同增加更多功能呢?一种选择是使用Facade pattern来调整模块调用并提供实现客户期望的接口的输出.
但话说回来,根据提供的细节,这是我建议的解决方案,但是应该仔细研究这个场景,以便能够确保这些是适合这项工作的工具,并承诺他们.
内容总结
以上是互联网集市为您收集整理的Java SE – 为不同的库模块实现“即插即用”的巧妙方法全部内容,希望文章能够帮你解决Java SE – 为不同的库模块实现“即插即用”的巧妙方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。