对于一个六边形项目,有多少 pom <module> 和 <packaging>jar=(大约)IDE 中 Java 子项目的数量=最终可执行 jar 中的 jar 数量?

问题描述 投票:0回答:0

在开始转向六边形架构之前,我的应用程序(大致)有这些罐子,聚集成一个更大的可执行文件。

(更准确地说,对于下面的评论:具体来说,我的每个Maven子项目(

<module>
)都有一个
<packaging>jar</packaging>
类型,最后,应用程序组件通过
org.springframework.boot:spring-boot-maven-plugin:repackage将所有内容收集到一个可执行jar中
插件。
如果我使用 zip 工具进入可执行 jar,我会在它的
BOOT-INF/lib
里面看到我的七八个小罐子,在大量的 SpringSparkJakata API 罐子中)。

0) 在开始迁移到六边形架构之前,这是我对组件/Maven 模块/IDE 子项目的粗略调度:

Business Object.jar

Association.jar
   . Spark Dataset
   . Association Service
   . Association REST Controller

Catalogue.jar
   . Spark Dataset
   . Association Service
   . Association REST Controller

Comptes.jar
   . Spark Dataset
   . Association Service
   . Association REST Controller

[seven others like these: Cities/Departments/Regions, Emploi,
Entreprise, Equipement, Formation, Mobilite, Revenus Imposition]

Main Spring Backend Application.jar
Angular Web Application.war

现在,六边形架构正在拆分,例如,协会管理分为:

adapters.inbound.port.AssociationAPI
adapters.inbound.rest.AssociationController

adapters.outbound.port.AssociationRepository

adapters.outbound.spark.dataset.association.AssociationObjetsSociauxDataset
adapters.outbound.spark.dataset.association.AssociationWaldecDataset

adapters.outbound.spark.analyse.association.AssociationAnalyseSpark

application.port.AssociationPort

application.service.AssociationService

domain.model.territoire.association.AncienNumeroWaldec
domain.model.territoire.association.Association
domain.model.territoire.association.NumeroRUP
domain.model.territoire.association.NumeroWaldec
domain.model.territoire.association.RegroupementAssociation

我是六边形建筑的新手。第一次应用,类名和接口名在脑子里还是有点不准确

但就部署而言,我要去哪里?

1) 如果我考虑我打算部署的罐子,我是否应该在这样的事情面前,在我的工作结束时?

adapters.inbound.port.AssociationAPI
adapters.inbound.port.CatalogueAPI
adapters.inbound.port.ComptesAPI
   ==> For a jar #1

adapters.inbound.rest.AssociationController
adapters.inbound.rest.CatalogueController
adapters.inbound.rest.ComptesController
   ==> for a jar #2

adapters.outbound.port.AssociationRepository
adapters.outbound.port.CatalogueRepository
adapters.outbound.port.ComptesRepository
   ==> for a jar #3

adapters.outbound.spark.dataset.association.AssociationObjetsSociauxDataset
adapters.outbound.spark.dataset.association.AssociationWaldecDataset
adapters.outbound.spark.dataset.datagouv.CatalogueDatagouvDataset
adapters.outbound.spark.dataset.balance.communes.BalanceComptesIntercommunalitesDataset
adapters.outbound.spark.dataset.balance.communes.BalanceComptesDataset
adapters.outbound.spark.dataset.balance.communes.BalanceComptesCommunesDataset
adapters.outbound.spark.dataset.individuel.AbstractComptesIndividuelsDataset
adapters.outbound.spark.dataset.individuel.communes.ComptesIndividuelsCommunesDataset
adapters.outbound.spark.dataset.individuel.intercommunalites.ComptesIndividiuelsIntercommunalitesDataset
adapters.outbound.spark.dataset.plan.comptes.PlanDeComptesDataset
   ==> for a jar #4

adapters.outbound.spark.analyse.association.AssociationAnalyseSpark
   ==> for a jar #5

application.port.AssociationPort
application.port.CataloguePort
application.port.ComptesPort
   ==> for a jar #6

application.service.AssociationService
application.service.CatalogueDatagouvService
application.service.BalanceCompteService
   ==> for a jar #7

domain.model.territoire.association.AncienNumeroWaldec
domain.model.territoire.association.Association
domain.model.territoire.association.NumeroRUP
domain.model.territoire.association.NumeroWaldec
domain.model.territoire.association.RegroupementAssociation
domain.model.catalogue.CatalogueId
domain.model.catalogue.JeuDeDonnees
domain.model.catalogue.OrganisationId
domain.model.catalogue.metadata.DebutOuFinPeriode
domain.model.catalogue.metadata.MetadataSource
domain.model.catalogue.metadata.NatureDonnee
domain.model.catalogue.metadata.NaturePhysiqueSource
domain.model.catalogue.metadata.Periode
domain.model.catalogue.metadata.PeriodiciteSource
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecRatioStructure
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecMoyenneStrate
domain.model.territoire.comptabilite.ComptesIndividuelsIntercommunalite
domain.model.territoire.comptabilite.Compte
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecStrateEtReductionVotee
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecStrateEtRatioStructureEtStrate
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecStrateEtTauxVoteEtStrate
domain.model.territoire.comptabilite.comptesIndividuels.ComptesTotalOuBaseEtParHabitant
domain.model.territoire.comptabilite.ComptesIndividuels
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecTauxVote
domain.model.territoire.comptabilite.NumeroCompte
domain.model.territoire.comptabilite.ComptesIndividuelsCommune
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecReductionVotee
domain.model.territoire.comptabilite.comptesIndividuels.RatiosNiveauxEtStructure
   ==> for a jar #8

在我看来很简单,但是把每个业务都放在一个罐子里似乎很混乱和麻烦。


2) 相反,我是否应该达到这样的结果,完全被商业概念和六边形性质所分裂?

adapters.inbound.port.AssociationAPI
   ==> for a jar #1

adapters.inbound.port.CatalogueAPI
   ==> for a jar #2

adapters.inbound.port.ComptesAPI
   ==> For a jar #3

adapters.inbound.rest.AssociationController
   ==> for a jar #4

adapters.inbound.rest.CatalogueController
   ==> for a jar #5

adapters.inbound.rest.ComptesController
   ==> for a jar #6

adapters.outbound.port.AssociationRepository
   ==> for a jar #7

adapters.outbound.port.CatalogueRepository
   ==> for a jar #8

adapters.outbound.port.ComptesRepository
   ==> for a jar #9

adapters.outbound.spark.dataset.association.AssociationObjetsSociauxDataset
adapters.outbound.spark.dataset.association.AssociationWaldecDataset
   ==> for a jar #10

adapters.outbound.spark.dataset.datagouv.CatalogueDatagouvDataset
   ==> for a jar #11

adapters.outbound.spark.dataset.balance.communes.BalanceComptesIntercommunalitesDataset
adapters.outbound.spark.dataset.balance.communes.BalanceComptesDataset
adapters.outbound.spark.dataset.balance.communes.BalanceComptesCommunesDataset
adapters.outbound.spark.dataset.individuel.AbstractComptesIndividuelsDataset
adapters.outbound.spark.dataset.individuel.communes.ComptesIndividuelsCommunesDataset
adapters.outbound.spark.dataset.individuel.intercommunalites.ComptesIndividiuelsIntercommunalitesDataset
adapters.outbound.spark.dataset.plan.comptes.PlanDeComptesDataset
   ==> for a jar #12

adapters.outbound.spark.analyse.association.AssociationAnalyseSpark
   ==> for a jar #13

application.port.AssociationPort
   ==> for a jar #14

application.port.CataloguePort
   ==> for a jar #15

application.port.ComptesPort
   ==> for a jar #16

application.service.AssociationService
   ==> for a jar #17

application.service.CatalogueDatagouvService
   ==> for a jar #18

application.service.BalanceCompteService
   ==> for a jar #19

domain.model.territoire.association.AncienNumeroWaldec
domain.model.territoire.association.Association
domain.model.territoire.association.NumeroRUP
domain.model.territoire.association.NumeroWaldec
domain.model.territoire.association.RegroupementAssociation
   ==> for a jar #20

domain.model.catalogue.CatalogueId
domain.model.catalogue.JeuDeDonnees
domain.model.catalogue.OrganisationId
domain.model.catalogue.metadata.DebutOuFinPeriode
domain.model.catalogue.metadata.MetadataSource
domain.model.catalogue.metadata.NatureDonnee
domain.model.catalogue.metadata.NaturePhysiqueSource
domain.model.catalogue.metadata.Periode
domain.model.catalogue.metadata.PeriodiciteSource
   ==> for a jar #21

domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecRatioStructure
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecMoyenneStrate
domain.model.territoire.comptabilite.ComptesIndividuelsIntercommunalite
domain.model.territoire.comptabilite.Compte
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecStrateEtReductionVotee
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecStrateEtRatioStructureEtStrate
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecStrateEtTauxVoteEtStrate
domain.model.territoire.comptabilite.comptesIndividuels.ComptesTotalOuBaseEtParHabitant
domain.model.territoire.comptabilite.ComptesIndividuels
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecTauxVote
domain.model.territoire.comptabilite.NumeroCompte
domain.model.territoire.comptabilite.ComptesIndividuelsCommune
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecReductionVotee
domain.model.territoire.comptabilite.comptesIndividuels.RatiosNiveauxEtStructure
   ==> for a jar #22

对于数量可观的罐子,因此:很多子项目?
在我的应用程序重新调度结束时,我可能很快就会有 100 个罐子。


3) 还是只按六边形全局性质调度,然后:商业概念?

adapters.inbound.port.AssociationAPI
adapters.inbound.rest.AssociationController
   ==> for a jar #1

adapters.inbound.port.CatalogueAPI
adapters.inbound.rest.CatalogueController
   ==> for a jar #2

adapters.inbound.port.ComptesAPI
adapters.inbound.rest.ComptesController
   ==> for a jar #3

adapters.outbound.port.AssociationRepository
adapters.outbound.spark.dataset.association.AssociationObjetsSociauxDataset
adapters.outbound.spark.dataset.association.AssociationWaldecDataset
adapters.outbound.spark.analyse.association.AssociationAnalyseSpark
   ==> for a jar #4

adapters.outbound.port.CatalogueRepository
adapters.outbound.spark.dataset.datagouv.CatalogueDatagouvDataset
   ==> for a jar #5

adapters.outbound.port.ComptesRepository
adapters.outbound.spark.dataset.balance.communes.BalanceComptesIntercommunalitesDataset
adapters.outbound.spark.dataset.balance.communes.BalanceComptesDataset
adapters.outbound.spark.dataset.balance.communes.BalanceComptesCommunesDataset
adapters.outbound.spark.dataset.individuel.AbstractComptesIndividuelsDataset
adapters.outbound.spark.dataset.individuel.communes.ComptesIndividuelsCommunesDataset
adapters.outbound.spark.dataset.individuel.intercommunalites.ComptesIndividiuelsIntercommunalitesDataset
adapters.outbound.spark.dataset.plan.comptes.PlanDeComptesDataset
   ==> for a jar #6

application.port.AssociationPort
application.service.AssociationService
   ==> for a jar #7

application.port.CataloguePort
application.service.CatalogueDatagouvService

application.port.ComptesPort
application.service.BalanceCompteService
   ==> for a jar #8

domain.model.territoire.association.AncienNumeroWaldec
domain.model.territoire.association.Association
domain.model.territoire.association.NumeroRUP
domain.model.territoire.association.NumeroWaldec
domain.model.territoire.association.RegroupementAssociation
domain.model.catalogue.CatalogueId
domain.model.catalogue.JeuDeDonnees
domain.model.catalogue.OrganisationId
domain.model.catalogue.metadata.DebutOuFinPeriode
domain.model.catalogue.metadata.MetadataSource
domain.model.catalogue.metadata.NatureDonnee
domain.model.catalogue.metadata.NaturePhysiqueSource
domain.model.catalogue.metadata.Periode
domain.model.catalogue.metadata.PeriodiciteSource
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecRatioStructure
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecMoyenneStrate
domain.model.territoire.comptabilite.ComptesIndividuelsIntercommunalite
domain.model.territoire.comptabilite.Compte
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecStrateEtReductionVotee
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecStrateEtRatioStructureEtStrate
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecStrateEtTauxVoteEtStrate
domain.model.territoire.comptabilite.comptesIndividuels.ComptesTotalOuBaseEtParHabitant
domain.model.territoire.comptabilite.ComptesIndividuels
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecTauxVote
domain.model.territoire.comptabilite.NumeroCompte
domain.model.territoire.comptabilite.ComptesIndividuelsCommune
domain.model.territoire.comptabilite.comptesIndividuels.ComptesAvecReductionVotee
domain.model.territoire.comptabilite.comptesIndividuels.RatiosNiveauxEtStructure
   ==> for a jar #9

在这里,子模块的数量会减少,但是出站适配器 jars [每种业务概念] 可以在最后看到 SparkPostgresql 等内部的混合,对于 adapters.inbound,我会发现自己在休息、角度应用等。

如果我变得一丝不苟并希望通过 Java 9 模块系统管理它们,我该如何检查它们的边界?

这也很奇怪。但一开始我可以为我的 Maven 模块/子项目(这导致最终收集到最终应用程序可执行 jar 中的 jar)。

java deployment jar packaging hexagonal-architecture
© www.soinside.com 2019 - 2024. All rights reserved.