Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ちいさなオブジェクトでドメインモデルを組み立てる

22,803 views

Published on

ドメイン駆動設計やるならスモールオブジェクトプログラミング。オブジェクト指向の設計・実装の基本スタイル。

Published in: Technology
  • Hi there! I just wanted to share a list of sites that helped me a lot during my studies: .................................................................................................................................... www.EssayWrite.best - Write an essay .................................................................................................................................... www.LitReview.xyz - Summary of books .................................................................................................................................... www.Coursework.best - Online coursework .................................................................................................................................... www.Dissertations.me - proquest dissertations .................................................................................................................................... www.ReMovie.club - Movies reviews .................................................................................................................................... www.WebSlides.vip - Best powerpoint presentations .................................................................................................................................... www.WritePaper.info - Write a research paper .................................................................................................................................... www.EddyHelp.com - Homework help online .................................................................................................................................... www.MyResumeHelp.net - Professional resume writing service .................................................................................................................................. www.HelpWriting.net - Help with writing any papers ......................................................................................................................................... Save so as not to lose
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/36cXjBY ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❤❤❤ http://bit.ly/36cXjBY ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

ちいさなオブジェクトでドメインモデルを組み立てる

  1. 1. ドメイン駆動設計やるならスモールオブジェクトプログラミング 小さなオブジェクトで ドメインモデルを組み立てる 豆ナイト : ドメイン居酒屋~モデル駆動プログラミングの集い 2012年10月26日 有限会社 システム設計 増田
  2. 2. Domain-Driven Design (DDD) ドメイン駆動設計
  3. 3. ドメイン駆動 興味を持つ利用者のやりたい事 会話する モデルで仮説 コードで実験
  4. 4. ドメインモデルの開発部品探しの旅 イテレーティブで発見的な活動 モデリング プログラミング リファクタリング
  5. 5. 利用者のやりたい事の粒度 会員登録で メールアドレスが必要。 アドレス形式チェック。 存在しないアドレスを拒否。 フリーメールは不可。 拒否するフリーメールのドメインリスト。 Biglobe はサブドメイン方式。 携帯メールも不可。個々の関心事を小さな部品で表現するやりたい事の追加や変更=部品の追加・入替え
  6. 6. 業務の概念の粒度日付 (時分秒を持たない) 金額 管理番号,登録番号時分(秒を持たない) 単価 取引先コード翌営業日, 休前日 数量,数量単位,換算 取引区分月末,月初, 四半期, 半期, 年度 消費税,税率,端数処理 契約番号期間 合計,小計,総合計 商品番号有効期限 数量割引 型式コード予定日 キャンペーン価格 製造番号期限切れ一週間前のアラート 季節料金 シリアルナンバー前日のリマインダ キャンセルポリシー …… …Date, String, BigDecimal, Long, … 小さな部品にプリミティブな型をラッピングした業務に必要なデータとロジックをカプセル化
  7. 7. 小さな部品で組み立てる インタフェース役 小さく(50行以下) 役割が明確な 調整役 オブジェクトが 小数の隣人と協力する 構造保持役 情報保持役 制御役 サービス提供役 サービス提供役 サービス提供役情報保持役 情報保持役情報保持役 サービス提供役 インタフェース役 インタフェース役
  8. 8. アンチパターン大きな部品 get10以上のimport文 get get5以上のインスタンス変数 set10行以上の長いメソッド set set100行を超えるクラス データ入れ物クラス getter/setter だけひとつの部品(クラス)がいろいろ知っていて、 業務の構造や業務ルールの理解が不十分。 よく分からないまま作った、とりあえずの置きなんでもやりたがる んでいく(偶発的凝集) 場所(クラス、パッケージ)に、なんでも突っ込
  9. 9. ドメインモデルの 小さな部品たち基本の練習
  10. 10. ドメイン駆動設計への道 テクニック オブジェクト For メソッドの構成 設計スタイル Thoughtful Developer オブジェクト間の特性の移動小さく作る練習 データの再編成 役割ステレオタイプ Leading DesignerOO エクササイズ 条件記述の単純化 小数の隣人と協力9つの簡単なルール メソッド呼び出しの単純化 ドメインの理解 言葉の力 実装の哲学 モデル駆動 クラス 振る舞いとメソッド 状態とコレクション
  11. 11. ドメインオブジェクトの設計と実装 小さく作る クラス 50行以内 メソッド 3行以内 パッケージ 10ファイル以内
  12. 12. 3行メソッドnextStage(){ ready(); set(); go();} こういうのが良い感じ
  13. 13. 必然的に オブジェクト指向(小さく) になる 9つの簡単なルール 「Thought Works アンソロジー」 第5章 オブジェクト指向エクササイズ原文 http://www.bennadel.com/resources/uploads/2012/ObjectCalisthenics.pdf
  14. 14. 小さく作る練習1.ひとつのメソッドのインデントは1段階まで2.else 句 を使わない3.すべてのプリミティブ、文字型をラッピング4.ファーストクラスコレクションを使う5.1行につき、ドットはひとつ6.名前は省略しない7.クラス50行、パッケージ10ファイルまで8.インスタンス変数は2つまで9.getter/setter を使わない
  15. 15. 小さく作る練習ガイド パターン集第5章オブジェクト指向エクササイズ パターン集9つのルールslideshare:オブジェクト指向できていますか?http://www.slideshare.net/MoriharuOhzu/ss-14083300オブジェクト指向エクササイズのススメhttp://www.slideshare.net/yojik/ss-1033616オブジェクト指向の設計と実装 学び方のコツhttp://www.slideshare.net/masuda220/ss-14263541 原文 http://www.bennadel.com/resources/uploads/2012/ObjectCalisthenics.pdf
  16. 16. ドメインモデルの 小さな部品たち実践の小技
  17. 17. How より What「複雑」を簡単に汎用部品 より 専用部品委譲の隠蔽 if を使わない for を使わない setter を使わない getter を使わない
  18. 18. How より WhatexpireDate.add(-1);expireDate.previousDay();expireDate.dayOfFinalAlert ();
  19. 19. factoring : 因数分解 複雑を簡単にx2-4xy+4y2-2x+4y-8 (x-2y-4)(x-2y+2) a = x-2y (a-4)(a+2)
  20. 20. 汎用部品 より 専用部品String AreaCodeLong EntryNumberBigDecimal ラッピング AmountDate ExpireDateList<Appoint> Appointments なんでも屋 目的特化
  21. 21. 委譲の隠蔽entrySheet.applicant().personName().familyNameKana().substring(0,1);entrySheet.indexKey();(Eclipse) alt + shift +s, M, M → 委譲メソッドの生成 alt + ctrl + H → 呼び出し階層呼び出し階層ビューで名前変更/移動のリファクタリング
  22. 22. if を使わないenumStrategy/State パターンMissing Object パターン (null object パターン)MapSet…
  23. 23. for を使わない・ファーストクラスコレクションに隠す・Collection フレームワーク API の復習 たとえば、TreeMap, TreeSet必要なら・Comparable の実装・Comparator の実装・equals()/hashCode() の override
  24. 24. setter を使わない完全コンストラクタ Value Object パターン 生成時に必要な値をすべて渡す状態を変えたい時 新しいオブジェクトを作る ライフサイクルの短いクラスの導入 (状態を固定できるまで細分化)
  25. 25. getter を使わない@Deprecated フレームワークは使っていいよ アプリケーションでは使っちゃだめよget して何したいの? ロジックの移動 (データにロジックを寄せる) フィールドの移動 (ロジックにデータを寄せる)
  26. 26. まとめ・ドメインモデルは小さな部品で・業務のやりたい事の粒度に注目・小さく作る練習・実践の小技

×