little hands' lab

ドメイン駆動設計、アジャイルプラクティスを実践し、解説しています。

タスク の検索結果:

DDDのエンティティはイミュータブルな実装にしてもいいの?(サンプルコード有り)[ドメイン駆動設計 / DDD]

…s ) { /** タスクを完了させます */ fun done(): Task { // ② return Task( // 変更しない値 id = this.id, name = this.name, // 変更する値 status = TaskStatus.DONE ) } companion object { /** ②ユースケースなどで使用するドメインのルール/制約を表現したファクトリメソッド */ fun create(name: TaskName): Task …

DDDで複数集約間の整合性を確保する方法(サンプルコードあり)[ドメイン駆動設計]

…をあげます。 とあるタスク管理アプリケーションで、タスクを作成したら、合わせて「(タスク名)が作成されました」という活動レポートを作成する、という実装を行うことになりました。 レポートに漏れがあるとまずいので、タスク作成時には確実に活動レポート(ActivityReport)を作成されるようにしたいです。つまり、タスク集約と活動レポート集約、という2つの集約間に確保したい整合性があるということです。どうしたらいいでしょうか。 なお、活動レポートはタスク集約以外のオブジェクトと…

CQRS実践入門 [ドメイン駆動設計]

…ースを想定します。 タスク、ユーザー、ラベルという3つの集約があり、それぞれにRepositoryがあるとします。そのような場合に、以下のようなタスク一覧画面を参照するというのはよくあることでしょう。 これを1つのUseCase(ApplicationService)で実装しようとすると、3つのRepositoryからそれぞれ値を取得し、戻り値のオブジェクトに詰め替えるような実装にせざるを得ません。 途端に以下のような問題が発生します。 複数の集約から値を取得して戻り値の型に…

ドメイン知識とユースケースの違いは何か?[ドメイン駆動設計][DDD]

…は重複登録できない タスク登録、更新、完了、未完了に戻す、延期、ユーザーへのアサインができる タスクは3回までしか延期ができない 非活性化されていないユーザーにアサインができる タスクを完了、アサインするとタスクレポートが作成される これはいわゆる「ビジネスロジック」と呼ばれて、3層レイヤーのアーキテクチャではBusinessLogic層と呼ばれる層に書くように決めたりします。 さて、ここまでに何か問題はあるでしょうか? 身に覚えのある方はいらっしゃると思いますが、そう、 B…

【コード問題集1】責務違反のRepository

…コード 以下のようなタスクEntityがあったとします。 コンストラクタで生成時のルールを,doneメソッドで状態遷移のルールを表現しています。 public enum TaskStatus { UNDONE, DONE } class Task { private String taskId; private String name; private TaskStatus taskStatus; private LocalDate dueDate; public Task(…

オニオンアーキテクチャにておいて、ドメイン層とアプリケーション層の責務はどう違うのか[DDD]

…記事の例で言うと、「タスクは3回だけ、1日ずつ延期することができる。」というのがデータ整合性のルールです。これを担保するためには「タスクを延期する時には延期回数を記録する」「延期前にこれまでの延期回数を確認し、3回を超えていたらエラーとする」といった制御を行う必要があります。 これを担保しないメソッドは「タスク延期回数を全く考慮せずに自由に期日を変更できる」といったものです。ActiveRecordパターンのオブジェクトのように、全てのsetterをpublic設定で公開して…

DDDに関する質問にバシバシお答えしました [ドメイン駆動設計]

…の に適しています。タスクの完了/未完了のような簡単な処理をイベントソーシングにする必要はなく、そこはメリット・デメリットの見極めが必要です。 サブドメインについて keycloakを使おうと考えてます。keycloakは別の境界付けられたコンテキストとして扱うべきでしょうか? この辺りは実装イメージと概念モデルの両面から考えるのがよいと思います。認証サーバーとして独立させるなら間違いなく別コンテキストです。 その場合はそこから受け取る情報をどうモデリングするか。永続化が必要…

モデルでドメイン知識を表現するとは何か[DDD]

…務アプリケーションでタスクというものをモデリングするとします。要件定義したところ、以下の不変条件を満たす必要があるということがわかりました。 タスクは必ずタスク名、期日を持つ タスクは未完了状態で作成し、完了したら戻すことはできない タスクは3回だけ、1日ずつ延期することができる。 タスク名は変更することができない これを実装してみます。 ※ Spring Data JPA(Hibernate)を使用した実装イメージです。Spring Data JPAについてあまり詳しくなく…