扫描仅将“原始”数据导入图形数据库,对于 Java,它仅表示字节码的结构,其中包含包类、方法、字段、注释或调用等元素。
的目的concepts
是使用更高级别的抽象来丰富此信息,例如,表示带有注释的 Java 类的节点@Local
被标记为Ejb
并Local
更容易被其他概念或约束使用。然后那些可以仅仅依靠标签Ejb
来执行检查,例如在服务层包中的正确位置。根据项目特定的命名规则,它们本身将被一个概念标记:
[[adr:ServiceLayer]]
[source,cypher]
.The package named `service` within the root package represents the `Service` `Layer`.
----
MATCH
(root:Package)-[:CONTAINS]->(serviceLayer:Package)
WHERE
root.fqn = "my.project.root"
and serviceLayer.fqn = "service"
SET
serviceLayer:Service:Layer
RETURN
serviceLayer as `Service Layer`
约束现在将取决于这两个概念并使用如下查询:
[[adr:EjbsMustBeLocatedInServiceLayer]]
[source,cypher,role=constraint,requiresConcepts="ejb:*,adr:ServiceLayer"]
.All EJBs must be located in the service layer.
----
MATCH
(ejb:Ejb)
WHERE NOT
(:Service:Layer)-[:CONTAINS*]->(ejb)
RETURN
ejb as `EJB Outside Service Layer`
----
必须显式应用概念,通常将它们定义为依赖项: