SlideShare una empresa de Scribd logo
1 de 50
プログラマーのための
DCIアーキテクチャ
一夜漬け
(Data, Context and Interaction)
2017/12/07 Gaiax エンジニア勉強会
今日のアジェンダ
第一部
DCI概説、からサンプル実装の提示
第二部
アジャイルとリーン
発表者情報
堤 大河(つつみ たいが)
DCD(Gaiax社の受託開発部門的なところ)
パートナーとして 2011〜
2000年よりこの業界。
エンタープライズもWEB系も、
大規模も小規模も、
あちこちでいろいろやってきてます。
facebook.com/taiga.tsutsumi
今日のアジェンダ
第一部
DCI概説、からサンプル実装の提示
第二部
アジャイルとリーン
DCIアーキテクチャとは
第一部 DCI概説、からサンプル実装の提示
• 2009年、MVCアーキテクチャのオリジネイターであ
る Trygve Reenskaug 氏と、『マルチパラダイムデ
ザイン』の著者である James O. Coplien氏によって
提唱されはじめた。
• 本来の意味でのオブジェクト指向、つまり
ユーザーのメンタルモデルに忠実な構造を目指す。
DCIアーキテクチャとは
第一部 DCI概説、からサンプル実装の提示
• ソフトウェアアーキテクチャあるいは実装パターン
のひとつ。”MVC”とかと同じ次元の話。
• Data, Context and Interaction の略。
ここでいうData は、振る舞いを定義しないプレーンなオブジェクト
(クラス)
• “ロール”という概念を設定・実装する。
ロールは、オブジェクトの振る舞いを表現する。
コンテキストに従って、(ロールを演じる)プレーンなオブジェクトに
ロールを注入することで、振る舞いを実現する。
https://vimeo.com/43536416
DCIの視座
第一部 DCI概説、からサンプル実装の提示
• 従来のオブジェクト志向言語による実装は、
静的な構造は表現出来ていても、動的な振る舞いを
表現できていなかった。これは人間の認識モデルとは
乖離している。
銀行口座間の送金を例にとるなら、
「振込先口座」と「振込元口座」は、
ヒトのメンタルモデル上明らかに別物。
なぜなら役割が、振る舞いが、異なるから。
これを、どっちも「口座クラス」、で
片付けていいのか?
DCIの視座
第一部 DCI概説、からサンプル実装の提示
• 口座クラスは、”is = 構造” を表現しているに過ぎない。
• では、”does = 振る舞い” を表現するのは?
↓
それはクラスではない別な
オブジェクトだ
役割(ロール)
そしてロールは文脈(コンテキスト)
によって決定づけられる。
=
第一部 DCI概説、からサンプル実装の提示
映画『マトリックス』
• ネオとトリニティがヘリコプターで脱出するシーン
• トリニティはヘリコプターを操縦できない
• が、ヘリコプターパイロットのプログラムを
ダウンロード
• それで操縦できるようになった
※操縦には、元からある四肢を使用する
これがDCIのちょうどいいメタファーになっている。
DCIの登場人物図解
第一部 DCI概説、からサンプル実装の提示
第一部 DCI概説、からサンプル実装の提示
ロールとコンテキストはどこから来るのか?
第一部 DCI概説、からサンプル実装の提示
別にむずかしい話ではなかった。
第一部 DCI概説、からサンプル実装の提示
じゃあちょっと実装してみるか。
花キューピッド
第一部 DCI概説、からサンプル実装の提示
第一部 DCI概説、からサンプル実装の提示
DCIのモデルケースとして、花宅配システム
仮称:hana9(はなきゅー)
の仕様を検討して、そして実装しよう。
※注:この間、システム設計の一般的な話が続きます。
なので、DCIに立脚しない話も混じります。
第一部 DCI概説、からサンプル実装の提示
hana9 の概要(ユースケース?ユーザーストーリー?)
• ユーザーは、hana9アプリから、希望のタイプの花
と数量を選び、希望の日に、希望の場所への配達を
注文する。
• 注文を受けたhana9運営は、加盟店に配達指示を
出して、注文を実現する。
第一部 DCI概説、からサンプル実装の提示
まずはざっくり、エンティティを抽出
第一部 DCI概説、からサンプル実装の提示
ユースケースをくわしく分析
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
商品注文
第一部 DCI概説、からサンプル実装の提示
ユースケースをくわしく分析
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• お届け希望日
• 配達先住所(市区町村)
商品注文
第一部 DCI概説、からサンプル実装の提示
“その注文(明細)を受けられる”=モノがあること。
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
商品注文
第一部 DCI概説、からサンプル実装の提示
データモデルを修正
第一部 DCI概説、からサンプル実装の提示
データモデルを修正
第一部 DCI概説、からサンプル実装の提示
データモデルを修正
第一部 DCI概説、からサンプル実装の提示
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
商品注文
第一部 DCI概説、からサンプル実装の提示
待って、モノがあっても配達できなければ・・
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
商品注文
第一部 DCI概説、からサンプル実装の提示
データモデルを再度修正
第一部 DCI概説、からサンプル実装の提示
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
商品注文
第一部 DCI概説、からサンプル実装の提示
核心のアルゴリズムに行き当たった
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 加盟店の手数料率
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• その注文(明細)を受けられる加
盟店群のうちから1軒を選択。そ
れをどのように選ぶか。
1. 手数料を多く取れる加盟店から
優先して選ぶ
2. 全加盟店の稼働が均等になるよ
うに選ぶ
↓
※この2種類をソート結果として提示する
商品注文
みたびデータモデル修正
第一部 DCI概説、からサンプル実装の提示
第一部 DCI概説、からサンプル実装の提示
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 加盟店の手数料率
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• その注文(明細)を受けられる加
盟店群のうちから1軒を選択。そ
れをどのように選ぶか。
1. 手数料を多く取れる加盟店から
優先して選ぶ
2. 全加盟店の稼働が均等になるよ
うに選ぶ
↓
※この2種類をソート結果として提示する
商品注文
第一部 DCI概説、からサンプル実装の提示
その他、見逃されがちだけど・・・
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 人気度(今、売れています!)
• 季節要因(値下げしました!)
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 加盟店の手数料率
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• その商品の人気度の導出
• その商品の、「値下げ鮮度」
の導出
• その注文(明細)を受けられる加
盟店群のうちから1軒を選択。そ
れをどのように選ぶか。
1. 手数料を多く取れる加盟店から
優先して選ぶ
2. 全加盟店の稼働が均等になるよ
うに選ぶ
↓
※この2種類をソート結果として提示する
商品注文
ロールとエンティティとコンテキスト。部品が揃った。
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 人気度(今、売れています!)
• 季節要因(値下げしました!)
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 加盟店の手数料率
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• その商品の人気度の導出
• その商品の、「値下げ鮮度」
の導出
• その注文(明細)を受けられる加
盟店群のうちから1軒を選択。そ
れをどのように選ぶか。
1. 手数料を多く取れる加盟店から
優先して選ぶ
2. 全加盟店の稼働が均等になるよ
うに選ぶ
↓
※この2種類をソート結果として提示する
第一部 DCI概説、からサンプル実装の提示
商品注文
ロール
ロール
ロールとエンティティとコンテキスト。部品が揃った。
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 人気度(今、売れています!)
• 季節要因(値下げしました!)
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 加盟店の手数料率
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• その商品の人気度の導出
• その商品の、「値下げ鮮度」
の導出
• その注文(明細)を受けられる加
盟店群のうちから1軒を選択。そ
れをどのように選ぶか。
1. 手数料を多く取れる加盟店から
優先して選ぶ
2. 全加盟店の稼働が均等になるよ
うに選ぶ
↓
※この2種類をソート結果として提示する
第一部 DCI概説、からサンプル実装の提示
商品注文
エンティティクラス
ロールとエンティティとコンテキスト。部品が揃った。
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 人気度(今、売れています!)
• 季節要因(値下げしました!)
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 加盟店の手数料率
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• その商品の人気度の導出
• その商品の、「値下げ鮮度」
の導出
• その注文(明細)を受けられる加
盟店群のうちから1軒を選択。そ
れをどのように選ぶか。
1. 手数料を多く取れる加盟店から
優先して選ぶ
2. 全加盟店の稼働が均等になるよ
うに選ぶ
↓
※この2種類をソート結果として提示する
第一部 DCI概説、からサンプル実装の提示
商品注文
コンテキストクラス
コンテキストクラス
※属性のオーナーの適切さ
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 人気度(今、売れています!)
• 季節要因(値下げしました!)
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 加盟店の手数料率
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• その商品の人気度の導出
• その商品の、「値下げ鮮度」
の導出
• その注文(明細)を受けられる加
盟店群のうちから1軒を選択。そ
れをどのように選ぶか。
1. 手数料を多く取れる加盟店から
優先して選ぶ
2. 全加盟店の稼働が均等になるよ
うに選ぶ
↓
※この2種類をソート結果として提示する
第一部 DCI概説、からサンプル実装の提示
商品注文
DCIでは
ロールは、データを持たないのが原
則とされている。
なのでこのケースように、特定の
ロールにのみ関わるデータであって
も、それをロールの属性としてはい
けない。
※属性のオーナーの適切さ
受注時
配達指示時
<データ> <アルゴリズム/ビジネスロジック>
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 人気度(今、売れています!)
• 季節要因(値下げしました!)
• お届け希望日
• 配達先住所(市区町村)
• 希望日時点での引当可能在庫
• 当日の店舗の稼働状況
• 加盟店の手数料率
• その注文(明細)を受けられる加
盟店が1軒でもあれば、注文(明
細)を成立させる
• その商品の人気度の導出
• その商品の、「値下げ鮮度」
の導出
• その注文(明細)を受けられる加
盟店群のうちから1軒を選択。そ
れをどのように選ぶか。
1. 手数料を多く取れる加盟店から
優先して選ぶ
2. 全加盟店の稼働が均等になるよ
うに選ぶ
↓
※この2種類をソート結果として提示する
第一部 DCI概説、からサンプル実装の提示
商品注文
拡張クラスを使えば(いわゆる継
承)この問題を処理できる。
拡張された商品クラスである”販売
中商品クラス”を置き、受注コンテ
キストクラスからはをそれを使うよ
うにする。
↓
継承
受注
コンテキストクラス
配達指示
コンテキストクラス
第一部 DCI概説、からサンプル実装の提示
サンプル実装
https://github.com/nowavailable/hana9
第一部 DCI概説、からサンプル実装の提示
Class Composition
• Roleはデータを保持しない。
ステートレスな振る舞いだけ。
• Ruby の extend のような、”振る舞い追加注入” 系は
IoC パターンを意識。
第一部 DCI概説、からサンプル実装の提示
Discussion
• ロングメソッドに対する議論
第一部 DCI概説、からサンプル実装の提示
Future Work
• GUIクライアントアプリなら?
• Actor モデルなら?
データモデリングとユースケース分析、
二方向から検討をした、
その相互作用によって、
“稼働上限” や ”出荷ルール” といった、
あたらしいエンティティを発見できた。
第一部 DCI概説、からサンプル実装の提示
ここまでのふりかえり
第一部 DCI概説、からサンプル実装の提示
気づきその1:ふたつの世界を行き来することの有益さ
第一部 DCI概説、からサンプル実装の提示
気づきその2:
第一部 DCI概説、からサンプル実装の提示
気づきその2:データモデリング≒ドメイン分析
データ
モデリング
DB
スキーマ
今日のアジェンダ
第一部
DCI概説、からサンプル実装の提示
第二部
アジャイルとリーン
第二部 アジャイルとリーン
アジャイルとリーンの違い
第二部 アジャイルとリーン
アジャイルとリーンの違い
アジャイル
リーン
第二部 アジャイルとリーン
アジャイルとリーンの違い
アジャイル
リーン • 長い期間のプランニングが必要/大事。
• 深いレベルの専門家が作る。
• フィードバックに応じた再調整が肝要。
• 直接の商品は、こっち。我々が売って
いるのはクラスではなくユースケース。

Más contenido relacionado

Similar a 20171207 Gaiaxエンジニア勉強会 プログラマーのためのDCIアーキテクチャ一夜漬け

ハイブリッドソーシング 「evelink」 ご紹介資料
ハイブリッドソーシング 「evelink」 ご紹介資料ハイブリッドソーシング 「evelink」 ご紹介資料
ハイブリッドソーシング 「evelink」 ご紹介資料CSK Serviceware
 
スマートデバイスSIの落とし穴と適した開発手法とは?
スマートデバイスSIの落とし穴と適した開発手法とは?スマートデバイスSIの落とし穴と適した開発手法とは?
スマートデバイスSIの落とし穴と適した開発手法とは?Takuya Kitamura
 
デブサミ2013【15-C-6】5msの中身を公開!~ネット広告配信と支える職人達~
デブサミ2013【15-C-6】5msの中身を公開!~ネット広告配信と支える職人達~デブサミ2013【15-C-6】5msの中身を公開!~ネット広告配信と支える職人達~
デブサミ2013【15-C-6】5msの中身を公開!~ネット広告配信と支える職人達~Developers Summit
 
IDG Interactive Media Guide 2010 1217
IDG Interactive Media Guide 2010 1217IDG Interactive Media Guide 2010 1217
IDG Interactive Media Guide 2010 1217Shinichi Sugimoto
 
IDG Interactive Mediaguide2010 1217版
IDG Interactive Mediaguide2010 1217版IDG Interactive Mediaguide2010 1217版
IDG Interactive Mediaguide2010 1217版idgjapan
 
Azure IoT/AI 最前線!「IoTビジネス事例のご紹介」
Azure IoT/AI 最前線!「IoTビジネス事例のご紹介」Azure IoT/AI 最前線!「IoTビジネス事例のご紹介」
Azure IoT/AI 最前線!「IoTビジネス事例のご紹介」kashiwanoha-iot
 
【2017年5月時点】セルフサービスBIからエンタープライズまで展開できるOracle Business Analytics クラウドプラットフォームのご紹介
【2017年5月時点】セルフサービスBIからエンタープライズまで展開できるOracle Business Analytics クラウドプラットフォームのご紹介【2017年5月時点】セルフサービスBIからエンタープライズまで展開できるOracle Business Analytics クラウドプラットフォームのご紹介
【2017年5月時点】セルフサービスBIからエンタープライズまで展開できるOracle Business Analytics クラウドプラットフォームのご紹介オラクルエンジニア通信
 
企業の生産性とクラウドの活用_202205.pptx
企業の生産性とクラウドの活用_202205.pptx企業の生産性とクラウドの活用_202205.pptx
企業の生産性とクラウドの活用_202205.pptxssuserf780ff
 
Estimating conversionrateindisplayadvertisingfrompastperformancedata
Estimating conversionrateindisplayadvertisingfrompastperformancedataEstimating conversionrateindisplayadvertisingfrompastperformancedata
Estimating conversionrateindisplayadvertisingfrompastperformancedataMasanao Ochi
 
Xpagesからさらにその先へ、最新Dominoアプリケーション開発で 企業のノーツアプリはこう生まれ変わる
Xpagesからさらにその先へ、最新Dominoアプリケーション開発で企業のノーツアプリはこう生まれ変わるXpagesからさらにその先へ、最新Dominoアプリケーション開発で企業のノーツアプリはこう生まれ変わる
Xpagesからさらにその先へ、最新Dominoアプリケーション開発で 企業のノーツアプリはこう生まれ変わるKazunori Tatsuki
 
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編Yasuhito Yabe
 
Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略
Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略
Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略Yoshihito Kuranuki
 
『Salesforece.com勉強会(コンサル向け)』第2回 at 大阪
『Salesforece.com勉強会(コンサル向け)』第2回 at 大阪『Salesforece.com勉強会(コンサル向け)』第2回 at 大阪
『Salesforece.com勉強会(コンサル向け)』第2回 at 大阪株式会社インサイト
 
Netadvantage 2012 volume2 最新情報 Reporting 編
Netadvantage 2012 volume2 最新情報 Reporting 編Netadvantage 2012 volume2 最新情報 Reporting 編
Netadvantage 2012 volume2 最新情報 Reporting 編Daizen Ikehara
 
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12QJasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12QYoshihito Kuranuki
 
てぃーだブログ主催 工務店/住宅会社向け「ネットで顧客創造」セミナー
てぃーだブログ主催 工務店/住宅会社向け「ネットで顧客創造」セミナーてぃーだブログ主催 工務店/住宅会社向け「ネットで顧客創造」セミナー
てぃーだブログ主催 工務店/住宅会社向け「ネットで顧客創造」セミナー株式会社はまぞう
 
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望についてKen Azuma
 

Similar a 20171207 Gaiaxエンジニア勉強会 プログラマーのためのDCIアーキテクチャ一夜漬け (20)

ハイブリッドソーシング 「evelink」 ご紹介資料
ハイブリッドソーシング 「evelink」 ご紹介資料ハイブリッドソーシング 「evelink」 ご紹介資料
ハイブリッドソーシング 「evelink」 ご紹介資料
 
スマートデバイスSIの落とし穴と適した開発手法とは?
スマートデバイスSIの落とし穴と適した開発手法とは?スマートデバイスSIの落とし穴と適した開発手法とは?
スマートデバイスSIの落とし穴と適した開発手法とは?
 
デブサミ2013【15-C-6】5msの中身を公開!~ネット広告配信と支える職人達~
デブサミ2013【15-C-6】5msの中身を公開!~ネット広告配信と支える職人達~デブサミ2013【15-C-6】5msの中身を公開!~ネット広告配信と支える職人達~
デブサミ2013【15-C-6】5msの中身を公開!~ネット広告配信と支える職人達~
 
WSDM2016報告会−参加報告#yjwsdm
WSDM2016報告会−参加報告#yjwsdmWSDM2016報告会−参加報告#yjwsdm
WSDM2016報告会−参加報告#yjwsdm
 
IDG Interactive Media Guide 2010 1217
IDG Interactive Media Guide 2010 1217IDG Interactive Media Guide 2010 1217
IDG Interactive Media Guide 2010 1217
 
IDG Interactive Mediaguide2010 1217版
IDG Interactive Mediaguide2010 1217版IDG Interactive Mediaguide2010 1217版
IDG Interactive Mediaguide2010 1217版
 
Azure IoT/AI 最前線!「IoTビジネス事例のご紹介」
Azure IoT/AI 最前線!「IoTビジネス事例のご紹介」Azure IoT/AI 最前線!「IoTビジネス事例のご紹介」
Azure IoT/AI 最前線!「IoTビジネス事例のご紹介」
 
【2017年5月時点】セルフサービスBIからエンタープライズまで展開できるOracle Business Analytics クラウドプラットフォームのご紹介
【2017年5月時点】セルフサービスBIからエンタープライズまで展開できるOracle Business Analytics クラウドプラットフォームのご紹介【2017年5月時点】セルフサービスBIからエンタープライズまで展開できるOracle Business Analytics クラウドプラットフォームのご紹介
【2017年5月時点】セルフサービスBIからエンタープライズまで展開できるOracle Business Analytics クラウドプラットフォームのご紹介
 
企業の生産性とクラウドの活用_202205.pptx
企業の生産性とクラウドの活用_202205.pptx企業の生産性とクラウドの活用_202205.pptx
企業の生産性とクラウドの活用_202205.pptx
 
Estimating conversionrateindisplayadvertisingfrompastperformancedata
Estimating conversionrateindisplayadvertisingfrompastperformancedataEstimating conversionrateindisplayadvertisingfrompastperformancedata
Estimating conversionrateindisplayadvertisingfrompastperformancedata
 
Developers Summit 2013【15-B-6】開発者の "資産形成" につながる Action とは?
Developers Summit 2013【15-B-6】開発者の "資産形成" につながる Action とは?Developers Summit 2013【15-B-6】開発者の "資産形成" につながる Action とは?
Developers Summit 2013【15-B-6】開発者の "資産形成" につながる Action とは?
 
Xpagesからさらにその先へ、最新Dominoアプリケーション開発で 企業のノーツアプリはこう生まれ変わる
Xpagesからさらにその先へ、最新Dominoアプリケーション開発で企業のノーツアプリはこう生まれ変わるXpagesからさらにその先へ、最新Dominoアプリケーション開発で企業のノーツアプリはこう生まれ変わる
Xpagesからさらにその先へ、最新Dominoアプリケーション開発で 企業のノーツアプリはこう生まれ変わる
 
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編
 
All for verdy
All for verdyAll for verdy
All for verdy
 
Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略
Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略
Social Change 〜 ソフトウェア開発者が経営者になるまでと、これからの戦略
 
『Salesforece.com勉強会(コンサル向け)』第2回 at 大阪
『Salesforece.com勉強会(コンサル向け)』第2回 at 大阪『Salesforece.com勉強会(コンサル向け)』第2回 at 大阪
『Salesforece.com勉強会(コンサル向け)』第2回 at 大阪
 
Netadvantage 2012 volume2 最新情報 Reporting 編
Netadvantage 2012 volume2 最新情報 Reporting 編Netadvantage 2012 volume2 最新情報 Reporting 編
Netadvantage 2012 volume2 最新情報 Reporting 編
 
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12QJasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
 
てぃーだブログ主催 工務店/住宅会社向け「ネットで顧客創造」セミナー
てぃーだブログ主催 工務店/住宅会社向け「ネットで顧客創造」セミナーてぃーだブログ主催 工務店/住宅会社向け「ネットで顧客創造」セミナー
てぃーだブログ主催 工務店/住宅会社向け「ネットで顧客創造」セミナー
 
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について
 

20171207 Gaiaxエンジニア勉強会 プログラマーのためのDCIアーキテクチャ一夜漬け

Notas del editor

  1. レインスカウ メンタルモデル云々は大事だけどここでは具体的なことは追わない。
  2. POJO
  3. 口座の持ち主が違うとここに気づかないかも。でも どっちも自分の口座だったら?それでも両者は違うよね?
  4. まず動画
  5. まず動画
  6. モノ・ヒト・コト
  7. で、まずは、軽くデータモデリングしました。 この過程はDCIとは直接関係ありません。が、システムひとつ設計するのに欠かすことができないんでね、やりました。  実際データモデリングって、すごく価値の高い技術なんですよ。 ここに、これER図なわけですけど、ここにたくさんの情報がはいってくるし、 ここからシステムのたくさんの箇所に作用します。設計のコアになる成果物です まあ、これはざっくりなモデリングですけどね。 どのくらいざっくりかっていうと、ユーザーエンティティが無いんですよ。 それでも成立してます。ざっくりとはいえ、適当には作ってなくて、 書いてあること全部に意味があるんですけど、まあ、ぜんぶ説明してると時間なくなっちゃうんで さっきのふたつのユースケース、ユーザーが注文をする、運営が加盟店に配達指示を出す、 という箇所に絞って説明します。 あ、そうだ、このER図、項目が横に並んでますよね。 この書き方あんまり・・・・ ・・・ 上から見ていきましょう。 ▽商品 標準単価 例えば、年契約で月払いの法人会員が相手だったりとか・・・ ▽注文 ここで代理キーが出てきてます。  意味の上では、注文番号がキー、明細もそれにあたるものを 枝番 データベースの世界だけじゃなくて、現実世界の中でもキーなので→単なる連番じゃなくて、、、 ▽そして、配達指示ですが、 これは注文明細にひも付きます。 つまり、ひとつの注文に複数の明細があれば、配達も複数の加盟店で分担されることがあるし ひとつの明細が複数の加盟店で分担されることもあります。 ▽で、さっき、データモデリングは重要、ER図は重要っていいましたけど、 このER図に表現されていないもの、も確かにありますよ。 アルゴリズム・・・ ▽あと、ここではアプリからの注文をそのまま配達指示につなげちゃってますけど実際には 変更のパターン イベント
  8. ・導出情報。One fact one place. ・これだけ揃えば、加盟店の受注可否は判定できるでしょう。  注文10032を見てみましょう・・・
  9. デザイナー由来の・・・
  10. ■おおもと https://github.com/nowavailable/hana9/tree/10_very_first_step/sequel https://github.com/nowavailable/hana9/blob/10_very_first_step/sequel/context/order_context.rb https://github.com/nowavailable/hana9/blob/10_very_first_step/sequel/context/request_delivery.rb https://github.com/nowavailable/hana9/blob/10_very_first_step/sequel/role/order_acceptor.rb https://github.com/nowavailable/hana9/blob/10_very_first_step/sequel/role/delivery_proposer.rb ■extend による実現 https://github.com/nowavailable/hana9/tree/20_composition/sequel/context https://github.com/nowavailable/hana9/blob/20_composition/sequel/context/order_context.rb https://github.com/nowavailable/hana9/blob/20_composition/sequel/context/request_delivery_context.rb ■Context accessor https://github.com/nowavailable/hana9/tree/30_composition_context_accessor/sequel/context https://github.com/nowavailable/hana9/blob/30_composition_context_accessor/sequel/context/context_accessor.rb ※使う側 https://github.com/nowavailable/hana9/blob/30_composition_context_accessor/sequel/context/request_delivery_context.rb https://github.com/nowavailable/hana9/blob/30_composition_context_accessor/sequel/role/delivery_proposer.rb https://github.com/nowavailable/hana9/blob/20_composition/sequel/context/request_delivery_context.rb (ここに来て)ちなみに、 注入ものって、 IoCパターン アンクルボブ Clean Archtecture ■OrderCanceler https://github.com/nowavailable/hana9/tree/41_composition_api_definition/sequel/role https://github.com/nowavailable/hana9/blob/41_composition_api_definition/sequel/role/order_acceptor.rb https://github.com/nowavailable/hana9/blob/41_composition_api_definition/sequel/role/order_canceler.rb https://github.com/nowavailable/hana9/blob/41_composition_api_definition/sequel/role/i_order_canceler.rb ■マスターブランチ Ruby on Rails サンプル実装 https://github.com/nowavailable/hana9/tree/master/AR/ https://github.com/nowavailable/hana9/tree/master/AR/app/models/concerns https://github.com/nowavailable/hana9/blob/master/AR/app/models/concerns/role/order_acceptor.rb https://github.com/nowavailable/hana9/blob/master/AR/app/models/concerns/role/delivery_proposer.rb https://github.com/nowavailable/hana9/blob/master/AR/app/models/concerns/context/order.rb モデルにはほとんど。。。 ロングメソッドだけど。。。
  11. ■おおもと https://github.com/nowavailable/hana9/tree/10_very_first_step/sequel https://github.com/nowavailable/hana9/blob/10_very_first_step/sequel/context/order_context.rb https://github.com/nowavailable/hana9/blob/10_very_first_step/sequel/context/request_delivery.rb https://github.com/nowavailable/hana9/blob/10_very_first_step/sequel/role/order_acceptor.rb https://github.com/nowavailable/hana9/blob/10_very_first_step/sequel/role/delivery_proposer.rb ■extend による実現 https://github.com/nowavailable/hana9/tree/20_composition/sequel/context https://github.com/nowavailable/hana9/blob/20_composition/sequel/context/order_context.rb https://github.com/nowavailable/hana9/blob/20_composition/sequel/context/request_delivery_context.rb ■Context accessor https://github.com/nowavailable/hana9/tree/30_composition_context_accessor/sequel/context https://github.com/nowavailable/hana9/blob/30_composition_context_accessor/sequel/context/context_accessor.rb ※使う側 https://github.com/nowavailable/hana9/blob/30_composition_context_accessor/sequel/context/request_delivery_context.rb https://github.com/nowavailable/hana9/blob/30_composition_context_accessor/sequel/role/delivery_proposer.rb https://github.com/nowavailable/hana9/blob/20_composition/sequel/context/request_delivery_context.rb (ここに来て)ちなみに、 注入ものって、 IoCパターン アンクルボブ Clean Archtecture ■OrderCanceler https://github.com/nowavailable/hana9/tree/41_composition_api_definition/sequel/role https://github.com/nowavailable/hana9/blob/41_composition_api_definition/sequel/role/order_acceptor.rb https://github.com/nowavailable/hana9/blob/41_composition_api_definition/sequel/role/order_canceler.rb https://github.com/nowavailable/hana9/blob/41_composition_api_definition/sequel/role/i_order_canceler.rb ■マスターブランチ Ruby on Rails サンプル実装 https://github.com/nowavailable/hana9/tree/master/AR/ https://github.com/nowavailable/hana9/tree/master/AR/app/models/concerns https://github.com/nowavailable/hana9/blob/master/AR/app/models/concerns/role/order_acceptor.rb https://github.com/nowavailable/hana9/blob/master/AR/app/models/concerns/role/delivery_proposer.rb https://github.com/nowavailable/hana9/blob/master/AR/app/models/concerns/context/order.rb モデルにはほとんど。。。 ロングメソッドだけど。。。 ーーー ・Coplienさん自身は、独自言語 Trygve そこでは
  12. ■おおもと https://github.com/nowavailable/hana9/tree/10_very_first_step/sequel https://github.com/nowavailable/hana9/blob/10_very_first_step/sequel/context/order_context.rb https://github.com/nowavailable/hana9/blob/10_very_first_step/sequel/context/request_delivery.rb https://github.com/nowavailable/hana9/blob/10_very_first_step/sequel/role/order_acceptor.rb https://github.com/nowavailable/hana9/blob/10_very_first_step/sequel/role/delivery_proposer.rb ■extend による実現 https://github.com/nowavailable/hana9/tree/20_composition/sequel/context https://github.com/nowavailable/hana9/blob/20_composition/sequel/context/order_context.rb https://github.com/nowavailable/hana9/blob/20_composition/sequel/context/request_delivery_context.rb ■Context accessor https://github.com/nowavailable/hana9/tree/30_composition_context_accessor/sequel/context https://github.com/nowavailable/hana9/blob/30_composition_context_accessor/sequel/context/context_accessor.rb ※使う側 https://github.com/nowavailable/hana9/blob/30_composition_context_accessor/sequel/context/request_delivery_context.rb https://github.com/nowavailable/hana9/blob/30_composition_context_accessor/sequel/role/delivery_proposer.rb https://github.com/nowavailable/hana9/blob/20_composition/sequel/context/request_delivery_context.rb (ここに来て)ちなみに、 注入ものって、 IoCパターン アンクルボブ Clean Archtecture ■OrderCanceler https://github.com/nowavailable/hana9/tree/41_composition_api_definition/sequel/role https://github.com/nowavailable/hana9/blob/41_composition_api_definition/sequel/role/order_acceptor.rb https://github.com/nowavailable/hana9/blob/41_composition_api_definition/sequel/role/order_canceler.rb https://github.com/nowavailable/hana9/blob/41_composition_api_definition/sequel/role/i_order_canceler.rb ■マスターブランチ Ruby on Rails サンプル実装 https://github.com/nowavailable/hana9/tree/master/AR/ https://github.com/nowavailable/hana9/tree/master/AR/app/models/concerns https://github.com/nowavailable/hana9/blob/master/AR/app/models/concerns/role/order_acceptor.rb https://github.com/nowavailable/hana9/blob/master/AR/app/models/concerns/role/delivery_proposer.rb https://github.com/nowavailable/hana9/blob/master/AR/app/models/concerns/context/order.rb モデルにはほとんど。。。 ロングメソッドだけど。。。 ーーー ・Coplienさん自身は、独自言語 Trygve そこでは
  13. GUIクライアントアプリは状態空間がある。すべての部品がそれに密に寄与しているので Context Role の粒度設定に基準がいる? Actorモデルは、    Actor内部からアクセスできる情報が限られるんで、その区切り
  14. リーン = うっすい  それは 必要なものだけに研ぎ澄ました結果の薄さ
  15. アジャイルに対する古典的な批判 アプリケーション基盤設計に対する言及の不足 あとは、ミスマッチなプロセスで作ってないか。 リーンは何でないか。リーンの外の世界もある。フレームワーク、プラットフォームはリーンではない。