SlideShare a Scribd company logo
1 of 20
モデルを作ろう!!
後 藤 暁 子
2
モデルって何だろう?
大体のサイトでMVCのモデルは次のよう
に説明されています。
【モデル】
システム内のビジネスロ
ジックを担当します。シス
テムの設計や機能をどう
するかがここで行われます。
MVCとかで聞く
けど…
システム内の
ビジネスロジック…?
4
そもそもモデルとは?
モデルってなんだろう?
物理の世界だったらこう
坂道に駐車している
車の写真
複雑なものを抽象化して必要なものだけにすること
プログラミングの
世界の中のモデル
クラス設計
classファイルとか
Interface とか
8
モデルを考えてみる例
料理するプログラムを作る
第一弾 肉じゃが
レシピをDBからとってくる。
下準備
野菜類→皮をむいてカット
肉→一口大に切る
調味料→計測して入れる
その後、煮込む。
9
モデルを作る必要があるのか?
foreach($materials as $material){
If($material[‘category’] == “vegetable”){
peal($material);
cut($material);
}else if ($material [‘category’] == “meat”){
cut($material);
}
$prepared_materials[]=$material;
}
boil($prepared_materials);
DBからとってきたものを
foreachとかIf文とかで処
理したらいいじゃないで
すか?
10
モデルを作らないと次にこうなる
foreach($materials as $material){
If($material[‘category’] == “vegetable”){
peal($material);
cut($material);
}else if ($material [‘category’] == “meat”){
cut($material);
//調味料を追加
}else if($material [‘category’] == “seasoning”){
measure($material);
}
$prepared_materials[]=$material;
}
boil($prepared_materials);
if文で書いたとこ
ろには、if文で追
加していくしかなく
なっちゃう!
どこに何があるのかわか
らない
わかりづらい
→総崩れ…っ!
11
将来的にこうなる。
foreach($materials as $material){
If($material[‘category’] == “vegetable”){
peal($material);
cut($material);
}else if ($material [‘category’] == “meat”){
cut($material);
//調味料を追加
}else if($material [‘category’] == “seasoning”){
measure($material);
//油揚げを追加
}else if($material [‘category’] == “aburaage”){
light_boil($material);
}
//肉と野菜に下味をつける場合
if ($material [‘seasoning’] == “true”){
//肉の場合
if($material[‘category’] ==“meat”){
momikomi($material);
//野菜の場合
}elseif($material[‘category’]==“vegetable”){
seasoning($material);
}
… 悪夢のようなコードが続く。
$prepared_materials[]=$material;
}
boil($prepared_materials);
見づらいし、
変更しづらいよねっ
ダメ。絶対。
12
モデルを考えてみよう
そういわれても(泣)
1個1個処理するなら
わかるんだけど
13
一つの手段 カテゴリー分けする
野菜
肉
調味料
全部材料の種類
14
材料を継承して、それぞれの具材にする
Vegetable extends Material{
private boolean $need_seasoning;
…途中省略…
public function preapare(){
peal();
parent::cut();
if($need_seasoning){
seasoning();
}
}
Meatクラス、Seasoningクラスを同じく
作る
foreach($materials as $material){
$prepared_materials[]=
$material->prepare();
}
boil($prepared_materials);
モデル(クラス) 呼び出し側
15
モデルを考えてみよう
とはいっても、肉とか野菜とか
はイメージしやすいけど、実際
のプログラミングの現場は
○○した時に××を△△する
みたいな処理の連続で
何をモデルにすればいいのか
わからない~
16
いきなり、できるものではないので
一人で悩まないで!
話し合ったり
紙に書いたり
プロトタイプを作ったり
段々できてくる。
もう一度言います。
複雑に見える事象から
概念とロジック
を抜き出そう。
18
モデルの世界に正解はない
作った後に、あー、こうすれば
よかったと思うこともあります。
だから…まぁせいぜい…
悔いが残らないほうを
自分で選べ
19
イケてるモデルとは
・すっきりしている
・思考が伸びる
・機能を改変したり、付け足しやすい
・人に説明しやすい
・あたっている感覚がある
・ビジネスに貢献する
まずは作ってみよう!

More Related Content

Similar to プログラミング社内勉強会 モデルを作ろう

ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発慎一 古賀
 
要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】
要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】
要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】Tomoharu ASAMI
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発Tomoharu ASAMI
 
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Ken SASAKI
 
MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考えるtomo_masakura
 
【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~
【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~
【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~Yoshitaka Kawashima
 
ぐるぐるDDDは何を目指しているのか
ぐるぐるDDDは何を目指しているのかぐるぐるDDDは何を目指しているのか
ぐるぐるDDDは何を目指しているのかKiro Harada
 
勉強会:設定管理について
勉強会:設定管理について勉強会:設定管理について
勉強会:設定管理についてWataru Sato
 
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】Tomoharu ASAMI
 
アジャイルにモデリングは必要か
アジャイルにモデリングは必要かアジャイルにモデリングは必要か
アジャイルにモデリングは必要かHiromasa Oka
 
機械学習応用のためのソフトウェアエンジニアリングパターン
機械学習応用のためのソフトウェアエンジニアリングパターン機械学習応用のためのソフトウェアエンジニアリングパターン
機械学習応用のためのソフトウェアエンジニアリングパターンHironoriTAKEUCHI1
 
ゲームエンジンとMVC
ゲームエンジンとMVCゲームエンジンとMVC
ゲームエンジンとMVCAimingStudy
 
100614 構造方程式モデリング基本の「き」
100614 構造方程式モデリング基本の「き」100614 構造方程式モデリング基本の「き」
100614 構造方程式モデリング基本の「き」Shinohara Masahiro
 
モデリングの神髄
モデリングの神髄モデリングの神髄
モデリングの神髄bpstudy
 
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))HironoriTAKEUCHI1
 
20160130 モデリング技術を学ぼう
20160130 モデリング技術を学ぼう20160130 モデリング技術を学ぼう
20160130 モデリング技術を学ぼうbonjin6770 Kurosawa
 
nomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab
 
MySQL Workbench をモデリングツールとして使ってみた
MySQL Workbench をモデリングツールとして使ってみたMySQL Workbench をモデリングツールとして使ってみた
MySQL Workbench をモデリングツールとして使ってみたNorio Nakamura
 
モデリングのすすめ
モデリングのすすめモデリングのすすめ
モデリングのすすめKiro Harada
 

Similar to プログラミング社内勉強会 モデルを作ろう (20)

MVVM入門
MVVM入門MVVM入門
MVVM入門
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】
要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】
要求/ユースケース 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第13回】
 
DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発DSL駆動によるクラウド・アプリケーション開発
DSL駆動によるクラウド・アプリケーション開発
 
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01
 
MVC の Model を考える
MVC の Model を考えるMVC の Model を考える
MVC の Model を考える
 
【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~
【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~
【17-E-4】 未来はどこにいても誰にでも平等にある。 未来を創るのは自分自身だ。 ~SIerの中で生きるということ~
 
ぐるぐるDDDは何を目指しているのか
ぐるぐるDDDは何を目指しているのかぐるぐるDDDは何を目指しているのか
ぐるぐるDDDは何を目指しているのか
 
勉強会:設定管理について
勉強会:設定管理について勉強会:設定管理について
勉強会:設定管理について
 
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
要求 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第12回】
 
アジャイルにモデリングは必要か
アジャイルにモデリングは必要かアジャイルにモデリングは必要か
アジャイルにモデリングは必要か
 
機械学習応用のためのソフトウェアエンジニアリングパターン
機械学習応用のためのソフトウェアエンジニアリングパターン機械学習応用のためのソフトウェアエンジニアリングパターン
機械学習応用のためのソフトウェアエンジニアリングパターン
 
ゲームエンジンとMVC
ゲームエンジンとMVCゲームエンジンとMVC
ゲームエンジンとMVC
 
100614 構造方程式モデリング基本の「き」
100614 構造方程式モデリング基本の「き」100614 構造方程式モデリング基本の「き」
100614 構造方程式モデリング基本の「き」
 
モデリングの神髄
モデリングの神髄モデリングの神髄
モデリングの神髄
 
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
機械学習応用システムのアーキテクチャ・デザイパターン(2020-07 ドラフトバージョン))
 
20160130 モデリング技術を学ぼう
20160130 モデリング技術を学ぼう20160130 モデリング技術を学ぼう
20160130 モデリング技術を学ぼう
 
nomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab_okayamaruby_subslide
nomlab_okayamaruby_subslide
 
MySQL Workbench をモデリングツールとして使ってみた
MySQL Workbench をモデリングツールとして使ってみたMySQL Workbench をモデリングツールとして使ってみた
MySQL Workbench をモデリングツールとして使ってみた
 
モデリングのすすめ
モデリングのすすめモデリングのすすめ
モデリングのすすめ
 

プログラミング社内勉強会 モデルを作ろう