【问题标题】:Java calling methods from restricted layerJava 从受限层调用方法
【发布时间】:2012-11-22 08:39:54
【问题描述】:

我什至不确定这是否可行,但我想询问社区的一般意见。

我必须解决以下问题:

我的项目有 2 个层,一个核心层和一个业务层。 该核心层提供业务层。此时业务类可以导入核心类并为所欲为。核心类只能导入核心类并使用其方法,禁止访问业务类及其各自的方法。

我想添加一个特定的功能: 我不想给 Core 任何对业务层的正常访问,但我想创建类似接口或类似的东西(我不知道如何在这里表达自己,因为我不知道它是否可能),那为核心类提供了一些来自业务类的特定方法以供使用。

任何人都可以帮助我,或者至少给我一些指导方针,或者在哪里搜索。

提前感谢您的支持。

编辑: 我使用带有 Seam 和 JBoss 的 Spring 框架

【问题讨论】:

  • 具体方法从业务层移至核心层。或者考虑使用通用模块。
  • 从您对核心层和业务层的定义来看,我想说保持核心类核心,即一种框架。只有业务层应该依赖于任何通用的东西(核心应该提供)。因此,如果您有业务层提供的东西并希望被 Core 使用,那么将这些功能解耦并将其添加到 Core 听起来是合乎逻辑的。

标签: java security reflection service layer


【解决方案1】:

你可能面临的是模块依赖和循环依赖的设计。简而言之,Core 需要的业务方法可能必须重构为“utils”模块或“Business-Core”模块,然后两者都可以访问。我只是在这里猜测。

除了自动化构建之外,像 Maven 这样的构建工具还鼓励这种模块化和依赖关系。一个从一个模块开始的项目到完成时被分成 3-4 个模块,这并不罕见。

【讨论】:

  • 好的。如果我不希望 Core 可以访问整个业务层,而只是业务的一个非常特定的部分,你会建议什么,我正在使用 maven。
  • 如果您不想要第三个模块:我会向 Core 添加一个由 Business 中的某些东西实现的通用接口。然后,您可以通过 Java ServiceLoader 或您自己的工厂查找实现并将接口传回核心。仍然存在循环依赖,但不会将业务类导入核心。避免循环依赖的唯一方法是创建第三个模块(T),以便 C 依赖于 T,B 依赖于 T。这些模块通常称为“api”或“spi”,几乎完全由接口、工厂组成, 和常量。
【解决方案2】:

这可以通过使用 AspectJ 来实现。您可以在 AspectJ-syntax 中编写规则,如果不强制执行,它将给出构建时间错误。示例见文章Archtectual Enforcement with Aid of AspectJ

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 2014-04-05
    • 2016-03-26
    • 2018-09-22
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多