web上で表現できる16進数ベースの配色ドメインのREST API。
ビジネスロジックの表現に注力したドメイン層を中心に複数のレイヤが一方から依存する構造。
ユースケース、ドメインオブジェクトなどドメイン知識の本体は color-usecase
配下に配備される。
<root>
color-usecase/
└ io.example.color/
└ domain/ : ドメインオブジェクト、値オブジェクトなど
└ usecase/ : ユースケースの表現
color-worker/
└ io.example.color.worker/
└ presentation/ : プレゼンテーション層、タスクレットと設定
build.gradle.kts
settings.gradle.kts
各レイヤの依存関係は図の通り
ドメイン層・プレゼンテーション層はそれぞれ別のGradleプロジェクトであり、マルチプロジェクトとしてビルドされる。
以下のユースケースを想定している。
- 2つの色を混ぜる
- 任意の幅で色を青 | 赤 | 緑にする
- 過去に生成した色を参照する
- rgbを指定して色の画像を返す
「2つの色を混ぜる」場合:
- ドメイン知識
- 色(ドメイン)そのものが持つ知識・ルール
- 色の混ぜ方はドメイン知識になる
- ユースケース
- アプリのクライアントが本アプリに対して行うアクション
- 「色が混ざるまでの一連の手続きの集合」はユースケースである 参考: ドメイン知識とユースケースの違いは何か?[ドメイン駆動設計][DDD]
16進数の表記にヘッダは不要です
リクエスト仕様
- 加法混色
- 減法混色
{
"mixedIn": "FF0000",
"mixingIn": "00FF00"
}
こちらのページを参考にしました。
色の演算ルールは以下のとおり
- R, G, Bすべて1バイト以下に収まる。各領域とも最大が00、最大がFFである。
- R, G, Bの各領域の加法が他の領域に繰り上げ・繰り下げとなることはない。