Submit Search
Upload
MVC の Model を考える
•
Download as ODP, PDF
•
7 likes
•
21,655 views
T
tomo_masakura
Follow
MVC の Model を考える。Controller が太って困っている人向け。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 28
Download now
Recommended
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
Yu Nobuoka
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
shinnosuke kugimiya
MvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かう
Shun Hikita
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
Yuta Hiroto
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Recommended
GUI アプリケーションにおける MVC
GUI アプリケーションにおける MVC
Yu Nobuoka
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
shinnosuke kugimiya
MvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かう
Shun Hikita
ブラック企業から学ぶMVCモデル
ブラック企業から学ぶMVCモデル
Yuta Hiroto
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
Hajime Yanagawa
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
serviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おう
よしだ あつし
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
例外設計における大罪
例外設計における大罪
Takuto Wada
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM
Hiroshi Maekawa
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターン
Yuta Matsumura
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
Riverpodでテストを書こう
Riverpodでテストを書こう
Shinnosuke Tokuda
MVVM入門
MVVM入門
Kazutoshi Urabe
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
Shigenori Sagawa
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門
normalian
MVCのつぎは・・・
MVCのつぎは・・・
Net Penguin
More Related Content
What's hot
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
serviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おう
よしだ あつし
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
例外設計における大罪
例外設計における大罪
Takuto Wada
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
Jun-ichi Sakamoto
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM
Hiroshi Maekawa
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターン
Yuta Matsumura
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
Riverpodでテストを書こう
Riverpodでテストを書こう
Shinnosuke Tokuda
MVVM入門
MVVM入門
Kazutoshi Urabe
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
Shigenori Sagawa
What's hot
(20)
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
serviceクラスをやめようサブクラスを使おう
serviceクラスをやめようサブクラスを使おう
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
例外設計における大罪
例外設計における大罪
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターン
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Riverpodでテストを書こう
Riverpodでテストを書こう
MVVM入門
MVVM入門
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
Similar to MVC の Model を考える
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門
normalian
MVCのつぎは・・・
MVCのつぎは・・・
Net Penguin
MVCになぞらえて理解するReact
MVCになぞらえて理解するReact
iPride Co., Ltd.
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソ
Yoshitaka Seo
20130316 mix cpp-yuo
20130316 mix cpp-yuo
OKUBO_Yusuke
MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方
Kazuki Shibata
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
Yoshitaka Seo
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
Tomoki Maeda
SpringBoot開発の基本
SpringBoot開発の基本
iPride Co., Ltd.
はじめての ASP.NET MVC
はじめての ASP.NET MVC
jz5 MATSUE
Separate Model from Catalyst
Separate Model from Catalyst
techmemo
ゲームエンジンとMVC
ゲームエンジンとMVC
AimingStudy
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
david9142
ASP.NET MVC プログラミング入門の入門
ASP.NET MVC プログラミング入門の入門
Masuda Tomoaki
Slide
Slide
Akura Pi
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
Akira Inoue
TableViewAgent
TableViewAgent
Akura Pi
Fuel php勉強会 1
Fuel php勉強会 1
Kazuya Igari
理論から学ぶデータベース実践入門Night(mvccでちょっとハマった話)
理論から学ぶデータベース実践入門Night(mvccでちょっとハマった話)
Hironori Miura
Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツ
Masuda Tomoaki
Similar to MVC の Model を考える
(20)
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門
MVCのつぎは・・・
MVCのつぎは・・・
MVCになぞらえて理解するReact
MVCになぞらえて理解するReact
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソ
20130316 mix cpp-yuo
20130316 mix cpp-yuo
MVCフレームワークとの付き合い方
MVCフレームワークとの付き合い方
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
SpringBoot開発の基本
SpringBoot開発の基本
はじめての ASP.NET MVC
はじめての ASP.NET MVC
Separate Model from Catalyst
Separate Model from Catalyst
ゲームエンジンとMVC
ゲームエンジンとMVC
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
ASP.NET MVC プログラミング入門の入門
ASP.NET MVC プログラミング入門の入門
Slide
Slide
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
TableViewAgent
TableViewAgent
Fuel php勉強会 1
Fuel php勉強会 1
理論から学ぶデータベース実践入門Night(mvccでちょっとハマった話)
理論から学ぶデータベース実践入門Night(mvccでちょっとハマった話)
Xamarin.formsでのmvvm利用のコツ
Xamarin.formsでのmvvm利用のコツ
More from tomo_masakura
アダプターパターンを使って リリースブランチを排除
アダプターパターンを使って リリースブランチを排除
tomo_masakura
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
tomo_masakura
HTML5 開発環境の紹介
HTML5 開発環境の紹介
tomo_masakura
HTML5 アプリ開発
HTML5 アプリ開発
tomo_masakura
HTML5 のお話
HTML5 のお話
tomo_masakura
Git トピックブランチと歴史の改ざん
Git トピックブランチと歴史の改ざん
tomo_masakura
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
tomo_masakura
More from tomo_masakura
(7)
アダプターパターンを使って リリースブランチを排除
アダプターパターンを使って リリースブランチを排除
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
HTML5 開発環境の紹介
HTML5 開発環境の紹介
HTML5 アプリ開発
HTML5 アプリ開発
HTML5 のお話
HTML5 のお話
Git トピックブランチと歴史の改ざん
Git トピックブランチと歴史の改ざん
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
MVC の Model を考える
1.
MVC の Model について 考える codeArts
(株) 政倉 智
2.
MVC ってこんなの ModelModel ControllerController ViewView
3.
でも、こんなんなってません? ModelModel ControllerController ViewView
4.
Controller が太るんです ● MVC
って変更に強いはずなのに、なんかうまくいかない! ちょこっとしたことですぐ動かなくなる! ● こういう時はだいたい Controller にコードが集中していて 太っている時
5.
MVC と三層アーキテクチャの対比 ModelModel ControllerController ViewView データ層 ドメイン層 プレゼンテーション層
6.
Model はドメイン層 ● MVC
の Model はドメイン層 (ビジネスロジック) にあたる ● Controller が太るのは、このドメイン層のコードを Controller に書いているから!
7.
なんでそうなるのか? ● だって MVC
のチュートリアルがそうだもの! ● Model をデータストアにして処理は Controller に書かれて る
8.
なぜ Controller に書くとダメなの? ●
そもそもなぜ Controller に書いてはいけないのか
9.
MVC はだいたいこんな感じ ● 基本的に
Controller は View の設計に引きずられる ● Model はアプリの機能に引きずられる View A View B Controller A Controller B Model
10.
Controller にビジネスロジックを書 く ● ドメイン層
(ビジネスロジック) を Controller に書くとこ んな感じになる View A View B Controller A Controller B Model ビジネスロジック
11.
View A が必要なくなった! ●
View A が必要なくなったとする View A View B Controller A Controller B Model ビジネスロジック
12.
あっ! ● 連鎖的に Controller
A が要らなくなるけど、ビジネスロ ジックまで消えちゃう! View A View B Controller A Controller B Model ビジネスロジック
13.
しくしく... ● ビジネスロジックを Controller
B に移動するはめに... ● ちなみにこれ、テストコードも同時なので最悪のパター ン! View A View B Controller A Controller B Model ビジネスロジック ビジネスロジック
14.
Model に書いておけば ● Model
にビジネスロジックを書くと良いよ View A View B Controller A Controller B Model ビジネスロジック
15.
View A を消しても大丈夫 ●
View A を消しても大して影響がない ● 少なくとも View B には一切影響がないね! View A View B Controller A Controller B Model ビジネスロジック
16.
ビジネスロジックは Model に! ●
というわけでビジネスロジックは Model に書きましょう ● AngularJS の場合は Factory という便利なものがあって、 それを使いましょう
17.
Model がでかくなるだけじゃ? ModelModel ControllerController ViewView
18.
実際そうなんです ● 今度は Model
がでかくなってひーひー言います ● でも、Controller が太るよりマシです ● なぜマシかというと、Model は Controller と違って View の変更の余波を受けにくいからです
19.
小さく分割しましょう ● Model という一つのオブジェクトに色々させるのではな く、役割ごとに分割しましょう ●
Controller から見て Model が一つのオブジェクトに見えれ ば OK! その向こうにたくさんのオブジェクトがあっても 問題ない
20.
例) キャッシュ ● サーバーから
JSON データをも らって表示するだけの簡単なア プリ ● まずはキャッシュしないのを サッと作る ● View は割愛 Controller Model BaaS
21.
例) キャッシュ ● キャッシュ機能をつけてみる ●
肝はもともとある Model に キャッシュ機能をつけようとし ないこと ● まずは Model を BaaS に接続す るものと、それを呼び出す二つ に分ける Controller Model BaaS BaaS Client
22.
例) キャッシュ ● BaaS
Client と同じ API を持つ Cache System を作る ● BaaS Client と Model の間に Cache System を挿入する ● Controller から直接見える Model が変わっていないのがミ ソ ● ほとんどのコードは追加なの で、とても楽 Controller Model BaaS BaaS Client (Model) Cache
23.
例) 新着通知 ● Facebook
とかの新着通知です ● 投稿だったり、チャットだったり、いろいろあります 投稿 (Model) チャット (Model) 新着 (Controllerl) チャット (Controllerl)
24.
例) 新着通知 ● よく考えたら新着通知って何箇所かあったりするよね! ●
数付き数値アイコンと新着リストみたいな感じの 投稿 (Model) チャット (Model) 新着数表示 (Controllerl) 新着リスト表示 (Controllerl) チャット (Controllerl)
25.
例) 新着通知 ● 見ての通り似たような処理が
Controller に書かれている ● これがまた変更に弱くする 投稿 (Model) チャット (Model) 新着数表示 (Controllerl) 新着リスト表示 (Controllerl) 新着を抽出する 新着を抽出する チャット (Controllerl)
26.
例) 新着通知 ● こんな感じに新着情報を扱う
Model を作ると楽になる 投稿 (Model) チャット (Model) 新着数表示 (Controllerl) 新着リスト表示 (Controllerl) 新着 (Model) チャット (Controllerl)
27.
MVC の役割 ● Model/View/Controller
という役割のクラスがあるのではない ● クラスが Model/View/Controller のいずれかに分類される ● Controller がたくさんの Model を扱うとかはあんまよくない ● Model や Controller が複数のクラスから構成されていても全く問題 ない ● AngularJS で .controller で宣言したものだけが Controller っていう わけじゃないよ! ● Backbone.js で Backbone.Model を継承した型だけが Model ってい うわけじゃないよ!
28.
まとめ ● MVC のチュートリアルに惑わされないようにしよう! ●
MVC Framework の使い方よりも MVC の利点を理解しよ う! ● MVC Framework は大枠を提供するためのもの、その大枠 の中でさらにクラスを分割していくのはプログラマーのお 仕事 ● 余談だけど、似非 MVC で書くと、最悪は MVC Framework なんてない方が良かったんだ! ってなることも あるよ!
Download now