大良商城网站建设,凡客诚品的支付方式,男女在床上做羞羞的事的网站,重庆信息网招聘java 模块化我想每个人都会同意#xff0c;编写模块化应用程序和模块化通常是一件好事。 但是#xff0c;从Java和Scala语言以及各种Java / Scala框架来看#xff0c;对模块化的支持看起来如何#xff1f; 有很多不同的方法#xff01; 让我们看看其中的一些。 “保护”以… java 模块化 我想每个人都会同意编写模块化应用程序和模块化通常是一件好事。 但是从Java和Scala语言以及各种Java / Scala框架来看对模块化的支持看起来如何 有很多不同的方法 让我们看看其中的一些。 “保护”以下是指模块在编译时或运行时的分离程度。 配套 首先我们有Java或Scala软件包 。 在组织源代码时该概念非常有用。 但是它不提供编译时或运行时受程序包保护的可见性除外它没有被广泛使用保护因此很难说程序包对模块化代码有任何帮助。 此外还有很多命名问题因此也有约定例如如果我们有两种数据读取器实现一种使用数据库另一种使用文件系统则相关的类应该进入数据库和文件系统子包还是保留在同样的顶级套餐 即使类名在专用软件包中也应在它们之前加上数据库和文件系统吗 建立子项目 其次有Maven / SBT模块/子项目 。 它们提供了编译时保护这是一件非常好的事情现在我们可以静态地确保我们的代码仅引用显式指定的依赖项中的类。 但是随之而来的是一个显而易见的问题什么时候一个功能“足够大”以使其成为独立的Maven模块 可以有很多Maven模块每个模块仅包含几个类可以是PITA必须为每个类定义一个单独的pom目录结构还是应该更大一些 关于命名约定包名称应与模块名称相对应吗 如果是这样我们显然在这里违反了DRY ; 想象一下我们决定将数据库和文件系统数据读取器放入单独的程序包maven模块中并适当命名它们。 因此在myapp-database Maven模块的foo.bar.database包中我们有一个DatabaseReader外加10个帮助器类。 现在一个简单的重构将“数据库”重命名为“ db”成为一项非常复杂的任务最肯定的结果是在各个地方使用了各种术语。 OSGi 演进的下一步将是OSGi捆绑包 或等效地是JBoss Modules或Project Jigsaw中的 模块 。 一个这样的捆绑包通常是一个或多个Maven模块的产品但是它也通过适当地限定类加载器的范围来提供运行时保护。 Maven模块中的所有问题都被继承了……另外还需要命名包 嵌套类/蛋糕图案 限制代码范围的另一种可能性是使用嵌套类 甚至更进一步并在Scala中使用Cake模式 。 除了旧的问题使用什么软件包以及如何命名模块类外我们还有几个新问题。 首先模块的整个源代码现在位于一个文件中。 这可能意味着文件很长 但是可能更多的是IDE问题没有人说过需要一次编辑一个文件。 编辑器只能显示一个模块类/方法例如在Smalltalk IDE中。 蛋糕图案也不是没有问题 。 而且嵌套模块又如何呢 DI框架 最后我们有各种DI框架 例如GuiceSpring或CDI如果从适当的角度来看我们定义了可以依赖于其他模块由容器注入的小模块类。 将模块接口java接口与模块实现java类分开并且仅注入接口也是很常见的。 但是再次重申部分静态地防止注入实现的唯一方法是我们不得不求助于创建单独的-api和-impl Maven模块。 实际上如果我们采用嵌套类的方法那么DI框架可能非常适合解决模块间的依赖关系并为我们完成所有连接如果我们想避免出现以下情况这可能会非常有用模块具有新的依赖关系并且现在必须修改每个使用站点。 下一个 综上所述我认为支持模块化的各种方法可以使用某种统一性。 而且不幸的是这可能意味着完全偏离我们今天从Java / Scala所了解的新的软件包系统新的构建系统新的运行时系统。 不幸的是新的编程语言的出现在该领域提供的并不多。 您是否认为应该有一个模块系统可以在小型单个类和大型类集中使用 毕竟 DI容器用来解决依赖关系和实例化类的操作与启动时Maven或OSGi运行时的操作没有太大不同 还是模块固有地具有几种类型小型类级别和大型maven模块/ osgi捆绑包级别 最后也许还有其他一些非基于JVM的语言可以更好地解决模块化问题仍然可用 参考 模块模块模块……来自我们的JCG合作伙伴 Adam Warski 。 相关文章 JBoss模块示例–模块化Web应用程序 真正的模块化Web应用程序为什么没有开发标准 OSGi将Maven与Equinox结合使用 Java最佳实践系列 Java教程和Android教程列表 翻译自: https://www.javacodegeeks.com/2011/10/java-modularity-approaches-modules.htmljava 模块化