ドメインモデルの起動



https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=291420687
崔凡均の「ドメイン名開発開始(2022)」という本を読み、私の理解を記録した.
△参考にしてください.しかし、100%信頼しないでください.間違いがあれば、私たちと共有してください.
🌸
彼の名前を呼ぶ前に
彼はただ
ただの姿です.
私が彼の名前を呼んだとき
彼は私のそばに来た.
花になりました.
私が彼の名前を呼んだように.
私に似合う色と香り
誰かが私の名前を呼んだ.
彼のところへ行って、私も
彼の花になりたい.
僕らはみんな
何になりたい.
あなたは私に対してあなたに対して
忘れられない目になりたい.
金春秀.花の茂み

ドメインドメインとは?

  • 辞書の意味は「領域」「集合」です.
  • DDDでいうドメインとは、ビジネスドメインを指す.
  • トラフィックドメインは、類似のトラフィック間の集合である.
  • ドメインは、複数のサブドメインから構成される.
  • ドメインモデル

  • ドメインモデルは、基本的にドメイン自体を理解する概念モデルである.
  • 概念モデルは問題を純粋に分析した産物である.
  • コンセプトモデルは、データベース、トランザクション、パフォーマンス、実装テクノロジーなどの要因を考慮していないため、実際のコードを記述する際にコンセプトモデルを使用することはできません.
  • したがって、
  • は、概念モデルを実装可能なモデルに変換するプロセスを経験する.
  • ドメインモデルのエクスポート


    どんなに優秀な開発者でも,ドメインを知らずに符号化を開始することはできない.
  • によって導出されたモデルは、EntityとValueに分けられる.
  • エンティティと価値を正確に区別してこそ、ドメインを正確に設計し、実装することができるので、両者の違いを明確に理解することは、実装ドメインにとって非常に重要である.
    public class OrderLine {
    		private Product product;
    		private int price;
    		private int quantity;
    		private int amounts;
    		...
    }

    エンティティ

  • エンティティの最大の特徴は、識別子を有することである.
  • 識別子は、エンティティオブジェクトごとに一意であるため、エンティティごとに異なる識別子を有する.
  • エンティティを作成し、属性を変更および削除する前に、識別子が保持されます.
  • バリュー・タイプ

  • Valueタイプは、概念的に完全な1つを表現するために使用される.
  • public class Money {
    		private int value;
    		
    		public Money(int value) {
    				this.value = value;
    		}
    	
    		public int getValue() {
    				return this.value;
    		}
    }
    //Money를 사용하도록 OrderLine을 변경한 코드
    //Money 타입 덕에 price나 amounts가 금액을 의미한다는 것을 쉽게 알 수 있다. => 코드 가독성 향상
    //**Money는 더 이상 단순 숫자가 아닌 도메인의 '돈'을 의미하는 것**
    public class OrderLine {
    		private Product product;
    		private Money price;
    		private int quantity;
    		private Money amounts;
    		...
    }
  • Value Typeのもう一つの利点は、Value Typeに機能を追加できることです.(課金機能の追加)
  • public class Money {
    		private int value;
    		
    		...생성자, getValue()
    
    		public Money add(Money money) {
    				return new Money(this.value + money.value);
    		}
    
    		public Money multiply(int multiplier) {
    				return new Money(value * multiplier);
    		}
    }

    エンティティ識別子と価値タイプ

  • エンティティ識別子の実際のデータは、通常、Stringなどの文字列から構成される.
  • 金銭は単純な数字ではなく、ドメイン内の「金銭」を指すように、この識別子は単純な文字列ではなく、ドメイン内で特別な意味を持つ場合が多いため、識別子に価値のあるタイプを使用してその意味をよりよく表示することができる.
  • public class Order {
    		// OrderNo 타입 자체로 id가 주문번호임을 알 수 있다.
    		private OrderNo id;
    		...
    		public OrderNo getId() {
    				return id;
    		}
    }

    setメソッドをドメインモデルに入れない

  • setメソッドは、ドメインのコア概念または意図をコードから消滅させる.
  • ドメインオブジェクトを生成する場合、
  • setメソッドが不完全である可能性があります.
  • setメソッドを実施する特別な理由がなければ使用しない.
  • 私の考え


    ドメインとは以前は、ドメイン名であれば、URLを思い出していました.無知ですが、ドメインマスターも開発していると言えば、これがウェブサイトを作成する方法だと思います(🦮無知
    この章を読む過程で、ドメインに対する理解が狭いことに気づきました.それでも、今ドメイン名について質問されたら、正確に答える自信はありません.(本を読んでいるうちに、自分の答えを探す)
    ドメインはまだありませんが、ドメイン主導開発の目標は何なのか知っていると思います.一部紹介した金春秀(キム・チュンス)詩人の「花」を導入したのだろう.
    私が何かに関心を持つ前に、それは私にとって何でもないが、もし私が名前をつけたら、それは私に意味のある存在になるようだ.
    ドメイン主導開発が追求するのは、1つ(または複数)の「意味」の行為である.これはその意味を共有し拡張するプロセスです.