開発者が気を散らすことのない、単純な古い Java でドメイン モデルを実装するのに役立つライブラリのセット。
コードの読み取りと書き込みを容易にするために、アーキテクチャの概念を明示的に表現します。
ドメイン固有のコードを技術的な依存関係から解放します。定型コードを削減します。
ドキュメントを自動的に生成し、実装構造とアーキテクチャを検証します。
開発者の作業を楽にします。
コードの一部 (パッケージ、クラス、またはメソッド) がアーキテクチャ上の概念を実装していることを表現します。
人間の読者が、特定のコード部分がどのようなアーキテクチャ上の概念であるかを簡単に判断できるようにします。
ツールの統合を許可します。
コードの拡張。 (ツールの例: ByteBuddy と Spring および JPA の統合)。
アーキテクチャ上のルールを確認してください。 (ツールの例: jQAssistant、ArchUnit)。
例: 銀行ドメイン。
import org . jmolecules . ddd . annotation .*;
@ Entity
class BankAccount {
@ Identity
final IBAN iban ;
/* ... */
}
@ ValueObject
class IBAN { /* ... */ }
@ ValueObject
record Currency { /* ... */ }
@ Repository
class Accounts { /* ... */ }
ユビキタス言語を真剣に考えると、ドメイン言語の単語のみを含む名前 (クラス、メソッドなど) が必要になります。つまり、構成要素のタイトルを名前の一部に含めるべきではありません。したがって、銀行ドメインでは、 BankAccountEntity
、 CurrencyVO
、さらにはAccountRepository
タイプとして使用する必要はありません。代わりに、上記の例のように、 BankAccount
、 Currency
、およびAccounts
必要です。
それでも、私たちは、特定のクラス (または他のアーキテクチャ要素) が特別な構成要素であることを表現したいと考えています。 ie はデザインパターンを使用します。 jMolecules は、DDD で知られるビルディング ブロックに一連の標準アノテーションを提供します。
上記のアノテーションの代替として、jMolecules は、主に John Sullivan のシリーズ「Advancing Enterprise DDD」で提示されたアイデアに基づいた一連のインターフェイスも提供します。これらにより、型システム内で直接ビルディング ブロック間の関係を表現できるため、コンパイラーはモデルの正確性を検証するのに役立ち、Java リフレクションによって情報をより簡単に処理することもできます。
Identifier
— 識別子として機能する型を表す型。
Identifiable<ID>
— 識別子を公開するもの。
Entity<T extends AggregateRoot<T, ?>, ID> extends Identifiable<ID>
— エンティティ。どのAggregateRoot
に属し、どの識別子を公開するかを宣言します。
AggregateRoot<T extends AggregateRoot<T, ID>, ID extends Identifier> extends Entity<T, ID>
— 専用のIdentifier
を公開する、それ自体に属するEntity
である集約ルート
Association<T extends AggregateRoot<T, ID>, ID extends Identifier> extends Identifiable<ID>
— ターゲットAggregateRoot
への明示的な関連付け。
この配置により、モデリングに指針が与えられ、場合によってはリフレクションを介して、次のルールを簡単に検証できるようになります。
異なる集約の識別子が混同されるのを避けるために、集約ごとに専用の識別子タイプを強制します。
AggregateRoot
それに属すると宣言されたEntity
インスタンスのみを参照する必要があります。
AggregateRoot
とEntity
は、 Association
インスタンスを介して他のAggregateRoots
のみを参照する必要があります。
自動検証とランタイム テクノロジーの統合については、「jMolecules Integrations」を参照してください。
jmolecules-ddd
— DDD 構成要素 (値オブジェクト、エンティティ、集約ルートなど) をコードで表現するためのアノテーションとインターフェイス。
jmolecules-events
— コードでイベントの概念を表現するための注釈とインターフェイス。
kmolecules-ddd
— タイプベースのモデルの Kotlin/Java 相互運用の問題を軽減するためのjmolecules-ddd
の Kotlin ベースのフレーバー。
jMolecules は、レイヤード、オニオン、ヘキサゴナル アーキテクチャのスタイルに従って、より高いレベルのアーキテクチャ概念を説明するためのアノテーションを提供します。これらを使用すると、パッケージ全体をレイヤー、リング、またはポートとアダプターを含むものとしてマークできます。これらは、注釈を付ける各パッケージのpackage-info.java
ファイルに表示されます。例:
package-info.java
: @ DomainLayer
package org . acmebank . domain ;
import org . jmolecules . architecture . layered .*;
package-info.java
: @ ApplicationLayer
package org . acmebank . application ;
import org . jmolecules . architecture . layered .*;
このようにして、それぞれのパッケージ内のすべてのクラスは、アノテーションが付けられた層、リングの一部とみなされ、またはポート/アダプターとみなされます。
あるいは、クラスに直接アノテーションを付けることもできます。
import org . jmolecules . architecture . layered .*;
@ DomainLayer
@ Entity
public class BankAccount { /* ... */ }
@ ApplicationLayer
@ Service
public class TransferMoney { /* ... */ }
現在、Layered、Onion、および Hexagonal アーキテクチャのアノテーションが存在します。
jmolecules-architecture
— コードでアーキテクチャ スタイルを表現するためのアノテーション。
jmolecules-cqrs-architecture
— CQRS アーキテクチャ
@Command
@CommandDispatcher
@CommandHandler
@QueryModel
jmolecules-layered-architecture
— 階層化アーキテクチャ
@DomainLayer
@ApplicationLayer
@InfrastructureLayer
@InterfaceLayer
jmolecules-onion-architecture
— オニオンアーキテクチャ
クラシック
@DomainModelRing
@DomainServiceRing
@ApplicationServiceRing
@InfrastructureRing
簡素化(ドメインモデルとサービスを分離しない)
@DomainRing
@ApplicationRing
@InfrastructureRing
jmolecules-hexagonal-architecture
— 六角形のアーキテクチャ
@Application
@(Primary|Secondary)Adapter
@(Primary|Secondary)Port
jMolecules アノテーションとインターフェイスを使用して、特定のターゲット テクノロジの概念を表現するために必要な技術コードを生成できます。
Spring、Data JPA、Data MongoDB、Data JDBC、Jackson の統合 - jMolecules アノテーションを使用してコードを作成すると、これらのテクノロジですぐに機能します。
コードで表現された jMolecules の概念は、概念の定義から派生したルールを検証し、ドキュメントを生成するために使用できます。
jQAssistant プラグイン — さまざまなアーキテクチャ スタイル、DDD ビルディング ブロック、CQRS、およびイベントに適用されるルールを検証します。コードベースで利用可能な情報から PlantUML 図も作成します。
ArchUnit ルール — DDD ビルディング ブロック間の関係を検証できます。
Spring Modulith — モジュール モデルとドキュメントの目的で、jMolecules コンポーネント、DDD ビルディング ブロック、およびイベントの検出をサポートします (詳細については、Spring Modulith ドキュメントを参照してください)。
プロジェクトで jMolecules を使用するには、jMolecules への依存関係を宣言するだけです。リリース バイナリは、Maven 中央リポジトリから入手できます。すべてのバージョンを明示的に宣言する必要を避けるために、依存関係管理セクションでjmolecules-bom
使用することをお勧めします。
< dependency >
< groupId >org.jmolecules</ groupId >
< artifactId >jmolecules-ddd</ artifactId >
< version >1.9.0</ version >
</ dependency >
repositories {
mavenCentral()
}
dependencies {
implementation( " org.jmolecules:jmolecules-ddd:1.9.0 " )
}
mvn release:prepare -DscmReleaseCommitComment="$ticketId - Release version $version." -DscmDevelopmentCommitComment="$ticketId - Prepare next development iteration."
mvn release:perform -Dgpg.keyname=$keyname