在Java中实施分层架构

mic*_*has 13 java architecture eclipse dependencies maven

给定一个用Java编写的软件系统,由三层组成,A - > B - > C,即A层使用B层,B使用C层.

我想确保一个层的类只能访问同一层的类或其直接依赖,即B应该能够访问C但不能访问A.另外A应该能够访问B但不能访问C.

有没有简单的方法来执行这样的限制?理想情况下,如果有人试图访问错误图层的类,我希望eclipse立即投诉.

该软件目前使用maven.因此,我尝试将A,B和C放入不同的maven模块并正确声明依赖关系.这样可以防止B访问A,但不会阻止A访问C.

接下来,我尝试将C从依赖项排除到B.这现在也阻止了从A到C的访问.但是现在我不再能够使用copy-dependencies来收集运行时所需的所有传递依赖项.

有没有一种很好的方法可以让我清晰地分离图层,还可以让我收集所有需要的运行时依赖项?

ARI*_*RIS 2

也许你可以在 A 的 pom 中尝试一下:

<dependency>
    <groupId>the.groupId</groupId>
    <artifactId>moduleB</artifactId>
    <version>1.0</version>
    <exclusions>
        <exclusion>
            <groupId>the.groupId</groupId>
            <artifactId>moduleC</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>the.groupId</groupId>
    <artifactId>moduleC</artifactId>
    <version>1.0</version>
    <scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

这可以帮助你吗?