Upgrade to Pro — share decks privately, control downloads, hide ads and more …

概念投影によるオブジェクト指向設計の考え方とその方法/Conceptual projectio...

hiro@miraito
February 16, 2020

概念投影によるオブジェクト指向設計の考え方とその方法/Conceptual projection design

オブジェクト指向設計の中でも特に型指向に焦点を当てた概念投影指向という考え方を紹介しています。

アプリケーション設計とはそもそも何をする事なのか?という前提を考える事により、具体的な手法をなぞるのではなくプロダクト毎に柔軟に設計ができるようになるためのガイドラインとしてご覧ください。

※ このスライドは主催する Object-Oriented Conference 2020 の登壇用資料です。

hiro@miraito

February 16, 2020
Tweet

More Decks by hiro@miraito

Other Decks in Programming

Transcript

  1. Speaker 林 宏勝 hirodragon Twitter: @hirodragon112 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 4 株式会社ミライトデザイン

    CEO/Founder 「確かな設計によるより良いシステムを」 要件定義 | 設計 | プログラミング toB, toC のWebアプリ, スマートフォンアプリ開発 株式会社Jocy CTO 「Create My Life , Bet My Life」 美容室定額サービス「MEZON」開発・運営
  2. Today's Topic my assumptions / prerequisites プログラミングの基礎を理解していて設計に興味がある、 もしくは実践しているがしっくりきていない方へ 設計活動の捉え方を話します I

    will talk about アプリケーション開発における設計活動の考え方 概念投影指向による公理の型と定義の型とは ロジックとアクティビティ(営み) 具体例:まとめ 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 5
  3. Today's Topic I will NOT talk about DDDやICONIX SOLID原則やデザインパターン等 具体的手法や概念の解説

    概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 6
  4. 例えば… 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 37 棒だ ゴルフ クラブだ ゴルフクラブと言う概念を知 らない この子はゴルフクラブ認識は

    絶対に起こりえない つまりこの子の世界において ゴルフクラブが存在する事は ない ゴルフクラブと言う概念を 知っている 知っているものは認識できる このおじさんにとってこのゴ ルフクラブは存在する
  5. 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 39 無 ユーザー? アカウント? 商品? 売上? 価格? 税率?

    概念 知識を増やして (存在を教えてあげて) 仮想現実を 作り上げる ユーザー アカウント 商品 売上 価格 税率
  6. データ型の種類 公理の型 言語が提供するデータ型 代表的には string, int, bool 等がある。 また、Dateなど言語が用意するClassも公理とする。つまり言語よっ て幅がある

    これらの型は公理としてコンピュータの世界に存在する概念 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 46
  7. 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 71 定義の型 公理の型 Activity Application Logic 現実世界の 活動の概念表現

    アプリケーションを 成立させる為の概念 表現 言語が初期に 提供する機能 ここは 存在しない
  8. 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 72 定義の型 公理の型 Activity Application Logic 現実世界の 活動の概念表現

    アプリケーションを 成立させる為の概念 表現 言語が初期に 提供する機能 ここは 存在しない 言語が 実在する営みを表現する事はない
  9. 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 73 定義の型 公理の型 Activity Application Logic 現実世界の 活動の概念表現

    アプリケーションを 成立させる為の概念 表現 言語が初期に 提供する機能 ここは 存在しない プログラミング言語が提供する概念 小さなシステムであれば ここだけでも開発は可能
  10. 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 74 定義の型 公理の型 Activity Application Logic 現実世界の 活動の概念表現

    アプリケーションを 成立させる為の概念 表現 言語が初期に 提供する機能 ここは 存在しない Activityをアプリケーション上で実現する為の 概念
  11. 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 75 定義の型 公理の型 Activity Application Logic 現実世界の 活動の概念表現

    アプリケーションを 成立させる為の概念 表現 言語が初期に 提供する機能 ここは 存在しない 定義の型により存在させた「営み」 現実世界の活動を表現する アプリケーションの中核 さらに「Domain Activity」と 「UseCase Activity」に分類される
  12. 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 88 UseCase Activity Domain Activity をドメインモデリングにて洗い出しました。 ただ、それだけでは単なる用語集です。 なんの実用性もまだ持ちえません。

    少しシステムよりに近づけていきます。(と言ってもまだApplication Logic を意識する必 要はありません) 作成した用語集を具体的にどのように使用するか、というのも重要な現実世界の営みの一部 です。 これをUseCase Activity と呼びます。
  13. 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 92 Application Logic 例 - CSVファイル等のファイルレイアウトやそのヘッダ、パース方など - データベースなどの永続化

    - API呼び出し等の外部システム連携 - Job Queue 等技術的手法を実現する為の知識 これらは時によって、Activity と混同しがち。 また、多くの場合ClassではなくInterfaceとして抽象概念として定義される 注意点 - Application Logic は現実世界の営みに組み込まれているように見える場合がある - 例えばCSVでデータを取り込んでいる作業があったとしてもそれがTSVでも代用可能 であればそれは営みを実現する為の手段となるのでCSVであること自体はActivityと はならない
  14. 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 99 レイヤードアーキテクチャ レイヤードアーキテクチャの構成で重要な「Port – Adaptor 」 概念投影指向に基づいたシステムでは抽象化したい概念は Application

    Logic として投影されているでしょう。 ライフサイクルに合わせてレイヤーを切り、そこにPortとして Application Logic を抽象化し てください。 そしてApplicationの成立に必要な具体的な処理の多くはAdapterに収まります
  15. 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 101 契約による設計 なぜなら契約したい概念のほとんどはActivity と Application Logic としてアプリケーション の世界で認識できるようになっているでしょう。

    あとは、契約を書くだけです。 公理の型のみで作られたアプリケーションは契約を書きたくても書けません (厳密には緩い契約しか書けません)
  16. 概念投影によるオブジェクト指向設計の考え方とその方法 OOC2020 103 DDD Activity の洗い出しをするドメインモデリングをする際にできたモデルを アプリケーションに落とし込むだけです。 ActivityとApplication Logic の違いを認識した投影は、

    DDDの戦術的な手法にもスムーズに適応するでしょう。 したがってドメインがアプリケーションに振り回されることはありません。 戦略的設計に基づいて、ドメインを蒸留していきましょう。