diff --git a/README.md b/README.md index cb6038fda6d6e899d0cbca128bbc4e0aa861f934..26e75c72ee28d67f762908e990183874e4d3a55b 100644 --- a/README.md +++ b/README.md @@ -70,12 +70,27 @@ Available Commands: ``` +1. Run `coca analysis` +2. Run Command + ### Analysis ``` coca analysis ``` +### Arch + +``` +coca arch +``` + +Examples Results: + +![Architecture demo](docs/sample/arch.svg) + +Repo from: [https://github.com/howiehu/ddd-architecture-samples](https://github.com/howiehu/ddd-architecture-samples) + ### Find Bad Smells ```bash diff --git a/cmd/arch.go b/cmd/arch.go index 12f7861dca6c159aa741201b770e2b1539c450cc..eeca333b9728db06aa2dccf42a9cb534fb068d3e 100644 --- a/cmd/arch.go +++ b/cmd/arch.go @@ -30,8 +30,6 @@ var archCmd = &cobra.Command{ archApp := arch.NewArchApp() dotContent := archApp.Analysis(parsedDeps, identifiersMap) - fmt.Println(dotContent) - ignores := strings.Split("", ",") var nodeFilter = func(key string) bool { for _, f := range ignores { diff --git a/core/domain/arch/arch_app.go b/core/domain/arch/arch_app.go index ac70b2f001e9cb2686f38ec0dc0bb41dce35c85f..85a09d9d04dde5abf52645236fe62109201b1301 100644 --- a/core/domain/arch/arch_app.go +++ b/core/domain/arch/arch_app.go @@ -66,6 +66,10 @@ func addCallInMethod(clz models.JClassNode, identifiersMap map[string]models.JId // TODO: add implements, extends support for _, call := range method.MethodCalls { dst := call.Package + "." + call.Class + if src == dst { + continue + } + if _, ok := identifiersMap[dst]; ok { relation := &tequila.Relation{ From: src, diff --git a/docs/sample/arch.svg b/docs/sample/arch.svg new file mode 100644 index 0000000000000000000000000000000000000000..0fc5f92658a985096e86d38fc13403d0c75c1a88 --- /dev/null +++ b/docs/sample/arch.svg @@ -0,0 +1,762 @@ + + + + + + +G + + +cluster1 + +study.huhao.demo.adapters.inbound.rest.resources + + +cluster10 + +study.huhao.demo.adapters.inbound.rest.handlers + + +cluster11 + +study.huhao.demo.adapters.outbound.gateway + + +cluster12 + +study.huhao.demo.domain.core.common + + +cluster13 + +study.huhao.demo.application.usecases + + +cluster14 + +study.huhao.demo.adapters.inbound.rest + + +cluster15 + +study.huhao.demo.adapters.outbound.persistence.blog + + +cluster16 + +study.huhao.demo + + +cluster17 + +study.huhao.demo.application.gateway + + +cluster18 + +study.huhao.demo.domain.contexts.usercontext.user + + +cluster19 + +study.huhao.demo.application.concepts + + +cluster2 + +study.huhao.demo.domain.core.concepts + + +cluster3 + +study.huhao.demo.adapters.inbound.rest.resources.blog + + +cluster4 + +study.huhao.demo.adapters.outbound.persistence + + +cluster5 + +study.huhao.demo.domain.contexts.blogcontext.blog + + +cluster6 + +study.huhao.demo.adapters.inbound.rest.resources.publishedblog + + +cluster7 + +study.huhao.demo.application.dto + + +cluster8 + +study.huhao.demo.domain.contexts.blogcontext.blog.exceptions + + +cluster9 + +study.huhao.demo.domain.core.common.excpetions + + + +node35 + +DemoGatewayImpl + + + +node46 + +DemoGateway + + + +node35->node46 + + + + + +node51 + +Gateway + + + +node46->node51 + + + + + +node30 + +NoNeedToPublishException + + + +node32 + +DomainException + + + +node30->node32 + + + + + +node48 + +UserService + + + +node47 + +UserRepository + + + +node48->node47 + + + + + +node8 + +Service + + + +node48->node8 + + + + + +node9 + +Repository + + + +node47->node9 + + + + + +node28 + +PublishedBlogDto + + + +node4 + +ResponseDto + + + +node28->node4 + + + + + +node21 + +Blog + + + +node28->node21 + + + + + +node24 + +PublishedBlog + + + +node28->node24 + + + + + +node11 + +HumbleObject + + + +node4->node11 + + + + + +node42 + +BlogPO + + + +node42->node21 + + + + + +node43 + +PublishedBlogPO + + + +node42->node43 + + + + + +node21->node30 + + + + + +node21->node24 + + + + + +node13 + +AggregateRoot + + + +node21->node13 + + + + + +node41 + +BlogRepositoryImpl + + + +node41->node42 + + + + + +node41->node21 + + + + + +node22 + +BlogRepository + + + +node41->node22 + + + + + +node44 + +BlogMapper + + + +node41->node44 + + + + + +node22->node9 + + + + + +node39 + +QueryPublishedBlogUseCase + + + +node23 + +BlogService + + + +node39->node23 + + + + + +node50 + +UseCase + + + +node39->node50 + + + + + +node23->node21 + + + + + +node23->node22 + + + + + +node31 + +EntityNotFoundException + + + +node23->node31 + + + + + +node23->node8 + + + + + +node15 + +BlogDto + + + +node15->node4 + + + + + +node15->node21 + + + + + +node17 + +BlogSubResource + + + +node17->node15 + + + + + +node37 + +EditBlogUseCase + + + +node17->node37 + + + + + +node38 + +QueryBlogUseCase + + + +node17->node38 + + + + + +node37->node23 + + + + + +node37->node50 + + + + + +node18 + +CreateBlogRequest + + + +node3 + +RequestDto + + + +node18->node3 + + + + + +node3->node11 + + + + + +node25 + +PublishedBlogSubResource + + + +node25->node28 + + + + + +node25->node39 + + + + + +node14 + +BlogResource + + + +node14->node21 + + + + + +node14->node15 + + + + + +node14->node37 + + + + + +node14->node38 + + + + + +node26 + +PublishedBlogResource + + + +node26->node28 + + + + + +node26->node21 + + + + + +node26->node37 + + + + + +node43->node24 + + + + + +node7 + +ValueObject + + + +node24->node7 + + + + + +node20 + +BlogCriteria + + + +node36 + +Criteria + + + +node20->node36 + + + + + +node38->node22 + + + + + +node38->node23 + + + + + +node38->node20 + + + + + +node38->node50 + + + + + +node31->node32 + + + + + +node49 + +User + + + +node49->node13 + + + + + +node6 + +Entity + + + +node13->node6 + + + + + +node33 + +EntityExistedException + + + +node33->node32 + + + + + +node34 + +GlobalExceptionHandler + + + +node34->node32 + + + + + +node27 + +PublishBlogRequest + + + +node27->node3 + + + + + +node16 + +SaveDraftRequest + + + +node16->node3 + + + + + +node1 + +BasePath + + + +node2 + +BaseRequestSpecification + + + +node5 + +BaseResponseSpecification + + + +node40 + +MyBatisSpringTransaction + + + +node45 + +SpringWithMyBatisApplication + + + +node10 + +Factory + + + +node12 + +ReadModel + + + +node19 + +PersistenceObject + + + +node29 + +Page + + +