六边形项目调度什么IDE子项目(=Maven<modules>)?最终的可执行 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]

=> Those going into a Main-Spring-Backend-Application.jar 
   Inside its BOOT-INF/lib you find:
   Association.jar, Catalogue.jar, Comptes.jar...
   among other API, frameworks, drivers, used by the application.

=> 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

我现在的情况是,已经开始迁移,我现在有这个子项目树:

------------------------------------------------------------------------
Reactor Summary for Application : Extraction et analyse de données par Apache Spark :

POM Parent ......................................... SUCCESS
Domain-Core : Utilitaires bas niveau et mécanismes techniques des objets métiers SUCCESS
Domain : Objets métiers ............................ SUCCESS
Application-Port : Association ..................... SUCCESS
Adapter-Inbound-Port : Association ................. SUCCESS
Adapter-Outbound-Port : Association ................ SUCCESS
Application-Service-Core : Classes de base des services Spring SUCCESS
Adapter-Outbound-Dao : DAO pour Postgis (Général) .. SUCCESS
POM Parent pour les projets Spark .................. SUCCESS
Adapter-Outbound-Spark-Core : Classes de bases et utilitaires Spark SUCCESS
Adapter-Outbound-Spark-Dataset : Catalogue data.gouv.fr SUCCESS
Adapter-Outbound-Spark-Dataset : Maillage territorial (COG) SUCCESS
Adapter-Outbound-Spark-Dataset : Registre National des Associations (RNA) SUCCESS
Adapter-Outbound-Spark-Dataset : Comptes communaux et intercommunaux SUCCESS
Adapter-Outbound-Spark-Dataset : Emploi/Chômage .... SUCCESS
Adapter-Outbound-Spark-Dataset : Entreprises et établissements SUCCESS
Adapter-Outbound-Spark-Dataset : Base équipement INSEE SUCCESS
Adapter-Outbound-Spark-Dataset : Formation, enseignement, diplômes SUCCESS
Adapter-Outbound-Spark-Dataset : Mobilité .......... SUCCESS
Adapter-Outbound-Spark-Dataset : Revenus (salaires, retraites) et imposition des ménages SUCCESS
Adapter-Outbound-Spark-Analyse : Association ....... SUCCESS
Adapter-Outbound-Spark-Analyse : Impacts communaux . SUCCESS
Adapter-Inbound-Rest : Association ................. SUCCESS
Application-Service : Gestion des associations ..... SUCCESS
Application-Backend métier : Services d'enrichissement Open Data SUCCESS
Adapter-Inbound-Rest : Génération clients OpenAPI des services métiers (Général) SUCCESS
Adapter-Inbound-Web : Présentation des données ..... SUCCESS
Application : Extraction et analyse de données par Apache Spark SUCCESS 
------------------------------------------------------------------------
BUILD SUCCESS
 ------------------------------------------------------------------------
Total time:  16.331 s
Finished at: 2023-05-03T16:18:40+02:00
------------------------------------------------------------------------

我只提取了第一个商业家族/概念:Association。
做另一个(流动性、税收、城市……)会让我得到数量惊人的罐子/很多子项目。 我将很快在重新分配的应用程序中拥有数百个模块/罐子/ide 项目。


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 模块系统管理它们,我该如何检查它们的边界?

这也很奇怪。

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