More Related Content
スマートデバイスSIの落とし穴と適した開発手法とは? DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」 What's hot (18)
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方 ぐるぐるDDD(ドメイン駆動設計)に参加してみました ベロシティを上手く使って 技術的負債を計画的に解消する 20151110 ドメイン駆動設計によるサービス開発 Unityネイティブプラグインの勧め 〜UnityでiOS, AndroidのAPIを利用する方法〜 DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか DDDのモデリングとは何なのか、 そしてどうコードに落とすのか 「実践ドメイン駆動設計」 から理解するDDD (2018年11月) ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8 Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」 [MW10] Xamarin / OSS プロジェクトを活用したエンタープライズモバイルアプリケーションの実装 - Project Blue Monkey - ドメイン駆動設計のための Spring の上手な使い方 境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ) Viewers also liked (20)
Xp祭り2014 agile2014参加報告(パターンネットワーク分析を含む) Base DDD(ドメイン駆動設計) 参考文献を巡る旅 DDD読書会@大阪(最終回)のLT資料「ドメイン駆動設計で気づいたこと~権利の概念とERP分析への適用」 #dddosaka Swift3とObjective-Cのブリッジでハマったこと モダンな開発現場になるためのお作法としてのツール活用 クラウド利用も可能になって身近になった超高速リアルタイムEAI「Magic xpi」 iOS開発を楽しむ最初の一歩!デリゲートをなるべく分かりやすく! Similar to Swiftにおけるclassとstructの使い分けをDDDから考える (13)
SwiftにおけるClassとStructの使い分け 20140822 Swift 勉強会 vol.3 - はぢめての Swift 【Swift】 それ、enumとstructでやってみましょう!! Swift 2.0 で変わったところ「後編」 #cswift Swift事情2014夏 ~ Swift入門 beta6対応 20141220_iOS8マルチデバイス対応(Size Classes編) Swift 3 その基本ルールを眺める #cswift More from Takuya Kitamura (8)
アジャイルの手法を取り入れたプロジェクトマネジメントの実例 大手ユーザー企業に入ってマネジメントでやってみたこと グローバル空調メーカーによるIoTプラットフォームへの挑戦 サーバーレスアーキテクチャで実現するグローバル空調IoTプラットフォームへの挑戦 AngularJSとバックエンドサービスAppPotで作る業務システムハンズオン Swiftにおけるclassとstructの使い分けをDDDから考える
- 2. Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
自己紹介
北村 拓也
@chipstar_light
NCデザイン&コンサルティング株式会社
• 東京4名、関西3名の全員が在宅勤務
• 滋賀でリモートワークやってます!
• 企業向けアプリ開発・UXデザイン
コミュニティ活動
• 京都でドメイン駆動設計やエッセンシャルスク
ラムの読書会などを開催してました
• 京都アジャイル勉強会(#京アジャ)のお手伝
いしてます
2
- 3. Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved. 3
Swiftではclassとstructって
どう使い分けるのがいいの?
何かstructがいいみたいな話も聞くけど…
- 4. Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
Swiftのclass
参照型(reference type)
可変(mutable)
1箇所での変更を、全ての同一参照オブジェクトに反映
させる事ができる
状態が変化しても同じものだと認識したいものには便
利
4
- 5. Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
Swiftのstruct
値型(value type)
不変(immutable)
一度生成すると値は基本的に変えられない
値を変更する場合は、コピーして別のオブジェクトを
作る
参照を共有しても値を勝手に変えらる心配が無いため
副作用の心配が減る
5
- 6. Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
ドメイン駆動設計(DDD)とは
話すと長くなるので割愛
参考程度にこちらを見てください。
• ドメイン駆動設計入門
http://www.slideshare.net/TakuyaKitamura1/ddd-29003356
または懇親会で聞いてください。
6
- 7. Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
DDDにおけるモデルを表現する要素
Entity
Value Object
Service
7
今日の話題から
は外す
- 8. Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
Entity
抽象的な連続性と同一性
• 固有のIDを持ち、実装をまたいだとしても追跡されるような連続性を持
つオブジェクト
• 分散環境下でも、永続化前後でも追跡できないといけない
属性(状態)に左右されない同一性
• 連続性を保証するIDは、オブジェクトの属性値に左右されない
• 属性値が全て同じでもIDが異なれば別もの
属性値が異なっていてもIDが同じであれば同じもの
• 同一性の判断とライフサイクルは、モデル毎に個別に設計する
具体例
• 顧客、口座、注文、在庫、etc...
8
- 9. Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
Value Object
連続性と同一性が不要なオブジェクト
• 属性がどんな値であるかに焦点が置かれるもの
• 一過性のことも多く、操作のために生成されては破棄される
• 状態を変更できないもの(immutable)として扱う
他の何かの状態を記述する属性となる
• 「何」であるかだけが問題となり、「誰」であるか、あるいは「どれ」
であるかは問われないような設計の要素
• エンティティの属性としても使用される
具体例
• 色、量、地域、経路、etc...
9
- 10. Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved. 10
Entityはclass
Value Objectはstruct
で実装するのが自然じゃない?
- 11. Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved. 11
実装の段階でclassかstructか
を判断するのではなく、
設計(モデリング)の段階で意
図して識別できるのでは?
- 12. Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
まとめ
OOP vs FP、class vs struct といろいろあるけど…
コンテキストを絞って目的に応じた使い分けが良さそう
特にDDDというコンテキストではうまく使い分けられそう
Swiftだからではなく、設計時に意識するのが良さそう
DDDをちょっとだけ入門してみたい人は
• ドメイン駆動設計入門
http://www.slideshare.net/TakuyaKitamura1/ddd-29003356
12