SlideShare a Scribd company logo
2016年03月31日
北村 拓也(@chipstar_light)
Swiftにおけるclassとstructの使い分けを
DDD(ドメイン駆動設計)から考える
関西モバイルアプリ研究会 #12
Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
自己紹介
北村 拓也
 @chipstar_light
 NCデザイン&コンサルティング株式会社
• 東京4名、関西3名の全員が在宅勤務
• 滋賀でリモートワークやってます!
• 企業向けアプリ開発・UXデザイン
 コミュニティ活動
• 京都でドメイン駆動設計やエッセンシャルスク
ラムの読書会などを開催してました
• 京都アジャイル勉強会(#京アジャ)のお手伝
いしてます
2
Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved. 3
Swiftではclassとstructって
どう使い分けるのがいいの?
何かstructがいいみたいな話も聞くけど…
Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
Swiftのclass
 参照型(reference type)
 可変(mutable)
 1箇所での変更を、全ての同一参照オブジェクトに反映
させる事ができる
 状態が変化しても同じものだと認識したいものには便
利
4
Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
Swiftのstruct
 値型(value type)
 不変(immutable)
 一度生成すると値は基本的に変えられない
 値を変更する場合は、コピーして別のオブジェクトを
作る
 参照を共有しても値を勝手に変えらる心配が無いため
副作用の心配が減る
5
Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
ドメイン駆動設計(DDD)とは
 話すと長くなるので割愛
 参考程度にこちらを見てください。
• ドメイン駆動設計入門
http://www.slideshare.net/TakuyaKitamura1/ddd-29003356
 または懇親会で聞いてください。
6
Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
DDDにおけるモデルを表現する要素
 Entity
 Value Object
 Service
7
今日の話題から
は外す
Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
Entity
 抽象的な連続性と同一性
• 固有のIDを持ち、実装をまたいだとしても追跡されるような連続性を持
つオブジェクト
• 分散環境下でも、永続化前後でも追跡できないといけない
 属性(状態)に左右されない同一性
• 連続性を保証するIDは、オブジェクトの属性値に左右されない
• 属性値が全て同じでもIDが異なれば別もの
属性値が異なっていてもIDが同じであれば同じもの
• 同一性の判断とライフサイクルは、モデル毎に個別に設計する
 具体例
• 顧客、口座、注文、在庫、etc...
8
Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved.
Value Object
 連続性と同一性が不要なオブジェクト
• 属性がどんな値であるかに焦点が置かれるもの
• 一過性のことも多く、操作のために生成されては破棄される
• 状態を変更できないもの(immutable)として扱う
 他の何かの状態を記述する属性となる
• 「何」であるかだけが問題となり、「誰」であるか、あるいは「どれ」
であるかは問われないような設計の要素
• エンティティの属性としても使用される
 具体例
• 色、量、地域、経路、etc...
9
Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved. 10
Entityはclass
Value Objectはstruct
で実装するのが自然じゃない?
Copyright ©2016, NC Design & Consulting Co., Ltd. All rights reserved. 11
実装の段階でclassかstructか
を判断するのではなく、
設計(モデリング)の段階で意
図して識別できるのでは?
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
リモートで働きたい
デザイナとエンジニアを
募集しています。
http://ncdc.co.jp/recruit/

More Related Content

PDF
UXデザイン✕アジャイル✕受託開発
PDF
保守とDDDと私
PDF
スマートデバイスSIの落とし穴と適した開発手法とは?
PDF
ドメイン駆動設計におけるシナリオテストの活用
PPTX
ドメイン駆動設計と サーバサイドと私
PDF
ドメイン駆動設計を実践するプログラマーの悩み
PDF
現場で役立つシステム設計の原則
PDF
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
UXデザイン✕アジャイル✕受託開発
保守とDDDと私
スマートデバイスSIの落とし穴と適した開発手法とは?
ドメイン駆動設計におけるシナリオテストの活用
ドメイン駆動設計と サーバサイドと私
ドメイン駆動設計を実践するプログラマーの悩み
現場で役立つシステム設計の原則
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」

What's hot (18)

PPTX
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
PDF
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
PPTX
現場で役立つシステム設計の原則への感謝
PDF
ベロシティを上手く使って 技術的負債を計画的に解消する
PPTX
20151110 ドメイン駆動設計によるサービス開発
PDF
Unityネイティブプラグインの勧め 〜UnityでiOS, AndroidのAPIを利用する方法〜
PDF
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
PDF
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
PDF
ドメイン駆動設計の正しい歩き方
PDF
ドメイン駆動設計(DDD)導入判定チェックシート
PDF
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
PDF
その素敵なUI基盤を目指して・・・
PPTX
Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」
PDF
[MW10] Xamarin / OSS プロジェクトを活用したエンタープライズモバイルアプリケーションの実装 - Project Blue Monkey -
PDF
ドメイン駆動設計のための Spring の上手な使い方
PDF
ドメイン駆動設計 複雑さに立ち向かう
PPTX
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
現場で役立つシステム設計の原則への感謝
ベロシティを上手く使って 技術的負債を計画的に解消する
20151110 ドメイン駆動設計によるサービス開発
Unityネイティブプラグインの勧め 〜UnityでiOS, AndroidのAPIを利用する方法〜
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計(DDD)導入判定チェックシート
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
その素敵なUI基盤を目指して・・・
Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」
[MW10] Xamarin / OSS プロジェクトを活用したエンタープライズモバイルアプリケーションの実装 - Project Blue Monkey -
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計 複雑さに立ち向かう
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
Ad

Viewers also liked (20)

PPTX
概念モデリング再入門 + DDD
PPT
Xp祭り2014 agile2014参加報告(パターンネットワーク分析を含む)
PDF
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
PDF
DDD読書会@大阪(最終回)のLT資料「ドメイン駆動設計で気づいたこと~権利の概念とERP分析への適用」 #dddosaka
PDF
成長する組織を支えるシロクの自動化
PDF
顧客価値って奥深いですね
PDF
シロク流事業の立ち上げ方の成功と失敗
PDF
概念モデルって難しいですよね
PDF
オブジェクト指向アンチパターンを考えてみた
PPTX
Swift3とObjective-Cのブリッジでハマったこと
PPTX
AKIBA.swift vol.1
PDF
モダンな開発現場になるためのお作法としてのツール活用
PDF
プロトコル指向に想う世界観 #__swift__
PDF
ヤマオススメ@NGK2014
PPTX
クラウド利用も可能になって身近になった超高速リアルタイムEAI「Magic xpi」
PPTX
多人数iOSアプリ開発を考える
PDF
iOS開発を楽しむ最初の一歩!デリゲートをなるべく分かりやすく!
PPTX
設計書からの卒業
PDF
ドメイン駆動設計 の 実践 Part3 DDD
PDF
ドメイン駆動設計という仕事の流儀
概念モデリング再入門 + DDD
Xp祭り2014 agile2014参加報告(パターンネットワーク分析を含む)
Base DDD(ドメイン駆動設計) 参考文献を巡る旅
DDD読書会@大阪(最終回)のLT資料「ドメイン駆動設計で気づいたこと~権利の概念とERP分析への適用」 #dddosaka
成長する組織を支えるシロクの自動化
顧客価値って奥深いですね
シロク流事業の立ち上げ方の成功と失敗
概念モデルって難しいですよね
オブジェクト指向アンチパターンを考えてみた
Swift3とObjective-Cのブリッジでハマったこと
AKIBA.swift vol.1
モダンな開発現場になるためのお作法としてのツール活用
プロトコル指向に想う世界観 #__swift__
ヤマオススメ@NGK2014
クラウド利用も可能になって身近になった超高速リアルタイムEAI「Magic xpi」
多人数iOSアプリ開発を考える
iOS開発を楽しむ最初の一歩!デリゲートをなるべく分かりやすく!
設計書からの卒業
ドメイン駆動設計 の 実践 Part3 DDD
ドメイン駆動設計という仕事の流儀
Ad

Similar to Swiftにおけるclassとstructの使い分けをDDDから考える (13)

PDF
SwiftにおけるClassとStructの使い分け
PDF
楽しいSwift!クラスと構造体を知る:)
PDF
Swiftで、かなり微妙な型クラス
PDF
20140822 Swift 勉強会 vol.3 - はぢめての Swift
PPTX
【Swift】 それ、enumとstructでやってみましょう!!
PDF
Study Swift
PDF
Swift 2.0 で変わったところ「後編」 #cswift
PPTX
iPhoneアプリ開発の歩き方〜Swift編〜
PDF
Swiftのアプリ開発でハマったこと
PDF
Swift事情2014夏 ~ Swift入門 beta6対応
PDF
20141220_iOS8マルチデバイス対応(Size Classes編)
PDF
Swift 3 その基本ルールを眺める #cswift
SwiftにおけるClassとStructの使い分け
楽しいSwift!クラスと構造体を知る:)
Swiftで、かなり微妙な型クラス
20140822 Swift 勉強会 vol.3 - はぢめての Swift
【Swift】 それ、enumとstructでやってみましょう!!
Study Swift
Swift 2.0 で変わったところ「後編」 #cswift
iPhoneアプリ開発の歩き方〜Swift編〜
Swiftのアプリ開発でハマったこと
Swift事情2014夏 ~ Swift入門 beta6対応
20141220_iOS8マルチデバイス対応(Size Classes編)
Swift 3 その基本ルールを眺める #cswift

More from Takuya Kitamura (8)

PDF
アジャイルの手法を取り入れたプロジェクトマネジメントの実例
PDF
大手ユーザー企業に入ってマネジメントでやってみたこと
PPTX
グローバル空調メーカーによるIoTプラットフォームへの挑戦
PDF
サーバーレスアーキテクチャで実現するグローバル空調IoTプラットフォームへの挑戦
PDF
キレイなコードの書き方
PDF
AngularJSとバックエンドサービスAppPotで作る業務システムハンズオン
PDF
jOOQの紹介
PDF
ドメイン駆動設計入門
アジャイルの手法を取り入れたプロジェクトマネジメントの実例
大手ユーザー企業に入ってマネジメントでやってみたこと
グローバル空調メーカーによるIoTプラットフォームへの挑戦
サーバーレスアーキテクチャで実現するグローバル空調IoTプラットフォームへの挑戦
キレイなコードの書き方
AngularJSとバックエンドサービスAppPotで作る業務システムハンズオン
jOOQの紹介
ドメイン駆動設計入門

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