All Projects → jkazama → Ddd Java

jkazama / Ddd Java

Licence: mit
Spring Boot + Java [ DDD Sample ]

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Ddd Java

Sample Boot Micro
Spring Cloud + Gradle Multi Project + Java8
Stars: ✭ 72 (-62.3%)
Mutual labels:  gradle, spring-boot, ddd
Hex Arch Kotlin Spring Boot
Reference JVM multi module project for a reactive micro service and lambda using a hexagonal architecture, DDD, Kotlin, Spring Boot, Quarkus, Lambda, Gradle.
Stars: ✭ 83 (-56.54%)
Mutual labels:  gradle, spring-boot, ddd
Sample Boot Hibernate
Spring Boot + JPA ( Hibernate ) + Java8 [ DDD Sample ]
Stars: ✭ 97 (-49.21%)
Mutual labels:  gradle, spring-boot, ddd
Java Ddd Example
☕🎯 Hexagonal Architecture + DDD + CQRS in a Java project using SpringBoot
Stars: ✭ 119 (-37.7%)
Mutual labels:  spring-boot, ddd
Springcloud Miaosha
一个基于spring cloud Greenwich的简单秒杀电子商城项目,适合新人阅读。A simple spring cloud based seckill shopping mall project, suitable for young people to read. It can be used as a paper material for academic defense.
Stars: ✭ 187 (-2.09%)
Mutual labels:  lombok, spring-boot
Spring Blog
Spring Boot base Blog
Stars: ✭ 109 (-42.93%)
Mutual labels:  lombok, spring-boot
Ng Boot Oauth
oauth2 demo with angularjs and springboot
Stars: ✭ 99 (-48.17%)
Mutual labels:  gradle, spring-boot
Nice Knowledge System
📚不积跬步无以至千里,每天进步一点点,Passion,Self-regulation,Love and Share
Stars: ✭ 137 (-28.27%)
Mutual labels:  gradle, spring-boot
Downlords Faf Client
Official client for Forged Alliance Forever
Stars: ✭ 121 (-36.65%)
Mutual labels:  gradle, spring-boot
Java Ddd Skeleton
♨️ DDD in Java skeleton & examples. Course:
Stars: ✭ 140 (-26.7%)
Mutual labels:  gradle, ddd
Xupdateservice
Use Spring Boot easy build, Gradle build, and provide update service for XUpdate.(使用Spring Boot简易搭建,Gradle构建,为XUpdate提供更新服务)
Stars: ✭ 149 (-21.99%)
Mutual labels:  gradle, spring-boot
Webfluxtemplate
Spring Webflux template application with working Spring Security, Web-sockets, Rest, Web MVC, and Authentication with JWT.
Stars: ✭ 107 (-43.98%)
Mutual labels:  gradle, spring-boot
Spring Cloud Microservices Development
Spring Cloud Microservices Development.《Spring Cloud 微服务架构开发实战》
Stars: ✭ 106 (-44.5%)
Mutual labels:  gradle, spring-boot
Java Interview
At the beginning, it was the repository with questions from Java interviews. Currently, it's more like knowledge base with useful links.
Stars: ✭ 114 (-40.31%)
Mutual labels:  spring-boot, ddd
Seppb
普兰能效平台开源版(后端)
Stars: ✭ 104 (-45.55%)
Mutual labels:  lombok, spring-boot
Spring Backend Boilerplate
The modularized backend boilerplate based on Spring Boot Framework, easy to get started and add your business part.
Stars: ✭ 134 (-29.84%)
Mutual labels:  gradle, spring-boot
Meetingfilm
基于微服务架构的在线电影购票平台
Stars: ✭ 149 (-21.99%)
Mutual labels:  lombok, spring-boot
Spring Boot Angular4 Boilerplate
Quickstart for spring boot + angular 4 projects
Stars: ✭ 151 (-20.94%)
Mutual labels:  gradle, spring-boot
Crown
Based on SpringBoot2, Crown builds a rapidly developed web application scaffolding.
Stars: ✭ 161 (-15.71%)
Mutual labels:  gradle, lombok
Okhelper Service
OK帮 云进销存 (SpringBoot Restful 全家桶)
Stars: ✭ 146 (-23.56%)
Mutual labels:  lombok, spring-boot

English Version

ddd-java

はじめに

JSUG(日本Springユーザ会)の下記勉強会向けのサンプル実装です。

  • 2014/11/27 「SpringBootを用いたドメイン駆動設計」

Spring Boot 2 の利用に伴い実装コードを Java8 へ切り替えています。 Java7 での実装コードを確認したいときは 1.x ブランチを参照してください。

本サンプルではSpringBootLombokを利用してドメインモデリングの実装例を示します。実際に2007年くらいから現在に至るまで現場で利用されている実装アプローチなので、参考例の一つとしてみてもらえればと思います。
※JavaDocに記載をしていますが、サンプルに特化させているので実際の製品コードが含まれているわけではありません。

認証含む、より実践的な実装サンプルについてはsample-boot-hibernateを参照してください。
またUI側の実装サンプルについてはsample-ui-vue / sample-ui-reactを参照してください。

レイヤリングの考え方

オーソドックスな三層モデルですが、横断的な解釈としてインフラ層を考えます。

  • UI層 - ユースケース処理を公開(必要に応じてリモーティングや外部サイトを連携)
  • アプリケーション層 - ユースケース処理を集約(外部リソースアクセスも含む)
  • ドメイン層 - 純粋なドメイン処理(外部リソースに依存しない)
  • インフラ層 - DIコンテナやORM、各種ライブラリ、メッセージリソースの提供

UI層の公開処理は通常JSPやThymeleafを用いて行いますが、本サンプルでは異なる種類のクライアント利用を想定してRESTfulAPIでの公開を前提とします。(API利用前提のサーバ解釈)

SpringBootの利用方針

SpringBootは様々な利用方法が可能ですが、本サンプルでは以下のポリシーを用います。

  • DBの設定等、なるべく標準定義をそのまま利用する。
  • 設定ファイルはymlを用いる。Bean定義にxml等の拡張ファイルは用いない。
  • ライブラリ化しないので@Beanによる将来拡張性を考慮せずにクラス単位でBeanベタ登録。
  • 例外処理は終端(RestErrorAdvice/RestErrorCotroller)で定義。whitelabel機能は無効化。
  • サンプル用途しかないため、色々と前提置きが必要なProfileは利用しない。

Javaコーディング方針

Java8以上を前提としていますが、従来のJavaで推奨される記法と異なっている観点も多いです。
以下は保守性を意識した上で簡潔さを重視した方針となっています。

  • Lombokを積極的に利用して冗長さを排除
  • 名称も既存クラスと重複しても良いのでなるべく簡潔に
  • インターフェースの濫用をしない
  • ドメインの一部となるDTOなどは内部クラスで表現

パッケージ構成

パッケージ/リソース構成については以下を参照してください。

main
  java
    sample
      context                         … インフラ層
      controller                      … UI層
      model                           … ドメイン層
      usecase                         … アプリケーション層
      util                            … 汎用ユーティリティ
      - Application.java              … 実行可能な起動クラス
  resources
    - application.yml                 … 設定ファイル
    - messages-validation.properties  … 例外メッセージリソース
    - messages.properties             … メッセージリソース

サンプルユースケース

サンプルユースケースとしては以下を想定します。

  • 口座残高100万円を持つ顧客が出金依頼(発生 T, 受渡 T + 3)をする。
  • システムが営業日を進める。
  • システムが出金依頼を確定する。(確定させるまでは依頼取消行為を許容)
  • システムが受渡日を迎えた入出金キャッシュフローを口座残高へ反映する。

動作確認

サンプルはGradleを利用しているので、IDEやコンソールで動作確認を行うことができます。

STS(Eclipse)

開発IDEであるSTSで本サンプルを利用するには、事前に以下の手順を行っておく必要があります。 ※EclipseにSpringIDEプラグインを入れても可

  • JDK8以上のインストール
  • Lombokのパッチ当て(.jarを実行してインストーラの指示通りに実行)

次の手順で本サンプルをプロジェクト化してください。
※コンパイルエラーになる時は、Javaコンパイラの設定が1.8以上になっているかを確認してください。

  1. ./gradlew eclipse
  2. パッケージエクスプローラから「右クリック -> Import」でExsisting Project into Workspaceを選択してNextを押下
  3. Root folder:にダウンロードしたddd-javaディレクトリを指定してBuild Modelを押下
  4. Projectddd-javaを選択後、Finishを押下(依存ライブラリダウンロードがここで行われます)

次の手順で本サンプルを実行してください。

  1. Application.javaに対し「右クリック -> Run As -> Java Application」
  2. Consoleタブに「Started Application」という文字列が出力されればポート8080で起動が完了

コンソール

Windows/Macのコンソールから実行するにはGradleのコンソールコマンドで行います。
※事前にJDK7以上のインストールが必要です。

  1. ダウンロードしたjava-dddディレクトリ直下へコンソールで移動
  2. 「gradlew bootRun」を実行
  3. コンソールに「Started Application」という文字列が出力されればポート8080で起動が完了

ブラウザ

STSまたはコンソールで8080ポートでサーバを立ち上げた後、ブラウザから下記URLへアクセスする事でRESTfulAPIの実行テストを実施可能です。
※本来なら情報更新系処理はPOSTで取り扱うべきですが、UIの無いデモ用にGETでのアクセスを許容しています。
※パラメタは?key=valueで繋げて渡してください。

顧客向けユースケース

社内向けユースケース

バッチ向けユースケース

License

本サンプルのライセンスはコード含めて全てMIT Licenseです。
Spring Bootを用いたプロジェクト立ち上げ時のベース実装サンプルとして気軽にご利用ください。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].