SlideShare a Scribd company logo
ぼくがかんがえた
さいきょうの
MVC
id:karupanerura
13年9月20日金曜日
だれ?
かるぱねるら(karupanerura)
Perl, JS, Java, elisp, zsh
ソーシャルゲーム開発者
Mobile Factory, Inc.
Chiba.pm
13年9月20日金曜日
Author (PAUSE: KARUPA)
Plack::Middleware::HTMLLint
Filesys::Notify::KQueue
AnyEvent::ForkManager
Contribute
Teng
CPAN
13年9月20日金曜日
MVCおさらい!
13年9月20日金曜日
MODEL
ビジネスロジック
アプリケーション機能
(データベース操作)
データの変更の通知
ex) Backbone.Model
WebAppは例外
13年9月20日金曜日
VIEW
UI出力
データの整形
データの変換
ex) Template
13年9月20日金曜日
CONTROLLER
UI入力
入力をModel/Viewに受け渡す
Modelの結果をViewに通知する
WebAppなど
13年9月20日金曜日
本題
13年9月20日金曜日
MVC意外と
むずかしくないですか?
13年9月20日金曜日
個人的MVCあるある
ふぇぇ…超巨大Modelができちゃったよぉ……。
SQLが色々な所に書いてあってカオス。
気付いたらControllerでもModelでも同じデータをfetchし
てたけどどっちにまとめるべきだろう…。
ViewがJSONとHTML両方あるんだけど…。
というか急にJSONが増えたんだけど…。
13年9月20日金曜日
こういうの
なくしたいですよね
13年9月20日金曜日
今日はなすこと
MVCはそのまま使わない
MVCのカスタマイズ
チーム内規約をつくろう
まとめ
13年9月20日金曜日
MVCは
そのまま使わない
13年9月20日金曜日
MVCの定義は抽象的
対して、アプリケーションの種類は多い
Client Application
Web Application
API Server Application
そのままMVCを適用するとカオスになりがち
定義が曖昧な部分がブレる
13年9月20日金曜日
MVCのカスタマイズ
13年9月20日金曜日
なぜやるか
MVCの定義が曖昧な部分を明確にする
アプリケーションにMVCを最適化する
WebAppならWebAppのMVC
SocialAppならSocialAppのMVC
規則がはっきりしたコードが書きやすくなる
MVCの本来の目的の達成
13年9月20日金曜日
具体例
Web Applicationの場合
13年9月20日金曜日
WebAppの特徴(1)
入力がいろいろある
HTTP Header / Request Parameter / Cool URI /
etc...
うまい具合に吸収して統一しないと扱いにくい
出力もいろいろある
HTML / JSON / MessagePack / XML / etc...
13年9月20日金曜日
WebAppの特徴(2)
リクエスト毎にしか状態が無い
DBと組み合わせる必要がある
大量のリクエストを捌きたいケースも多い
キャッシュも考慮した仕組みが必要
アプリケーションの機能が膨大になるケースも
DB操作が多く煩雑になりがちなので分離して抽象化
13年9月20日金曜日
OVERVIEW
View
ControllerContext
Model DB
user
web service
request
response
13年9月20日金曜日
CONTEXT
リクエスト単位を管理するクラス
リクエスト毎にインスタンスを生成
ex) Amon2::Web
リクエスト単位での状態遷移とリソースを管理する
基本的にはここにアプリケーションロジックは書かない
13年9月20日金曜日
CONTROLLER
リクエストで渡されたデータを整理してModelに引き渡す
ビジネスロジックへの入力を抽象化する
入力の存在/型チェックの簡易Validationをする
Modelの結果をContext経由でViewに引き渡す
Modelの例外をcatchしてエラー処理を行う
Controllerを見ればリクエストのフローが全て見える
13年9月20日金曜日
MODEL
ビジネスロジックを抽象化する
目的に対して必要な処理を手続きとして実装
ビジネスロジックに依存するトランザクションも管理
カッチリしたValidationはここで行う
問題があればExceptionでControllerに通知
Modelを見ればアプリケーションの機能が分かる
13年9月20日金曜日
DB
データベース操作を抽象化する
SQLもこの名前空間で整理する
目的に対して必要なDB操作を手続きとして実装する
ex) DBIx::Sunny::Schema
DBを見ればデータベースをどのように操作するかが分かる
schemaのチューニングやDBキャッシュが容易になる
13年9月20日金曜日
VIEW
渡されたデータを素に出力を整形する
JSONならJSON向けにdeflateする役割もここが担う
HTMLならTemplateなど
複数のViewで統一したインターフェースを提供する
Viewクラスを差し替える事を容易に
Viewをみればデータをどのように整形するか分かる
13年9月20日金曜日
CACHE POINT
View
ControllerContext
Model DB
user
web service
request
response
13年9月20日金曜日
小まとめ
アプリケーションの要件毎に性質を分析しMVCを最適化
今回はWebAppという大きな括りでやったが実際は更に
細かく要件を絞る
MVCの曖昧な部分をアプリケーションに合わせて具体化
13年9月20日金曜日
いいかんじっぽい!
13年9月20日金曜日
まあでも
13年9月20日金曜日
実現できなきゃ
意味無い!!
13年9月20日金曜日
チーム内規約をつくる
各名前空間の役割を規約化する
明文化していることでブレにくくなる
「やってはいけない事」も書く
具体例としてダメな例を併記しておくとベター
コードレビューで規約に沿っているか確認する
可能なら自動テストで簡易チェックも
13年9月20日金曜日
まとめ
MVCはそのまま使わない
用途に合わせて構成とフローを整理して再構築する
チーム内規約を作り、守る
コードレビューを定期的に実施して意識づくり
可能ならば自動テストで簡易チェックも
13年9月20日金曜日
あなたがかんがえた
さいきょうの
MVC
13年9月20日金曜日
おわり
Mobile FactoryではMVCが好きな人材を募集しております
13年9月20日金曜日

More Related Content

PPTX
Jyoken 講習20150513
KEY
やはりお前らのMVCは間違っている
PDF
Validações no Ruby on Rails
PDF
Yapc asia-2012-lt-thon
KEY
正月発火村に参加して変なJobQueueサーバー作った話
PDF
Mojolicious::Liteを使ってみよう
PDF
Mojoliciousでつくる! Webアプリ入門
Jyoken 講習20150513
やはりお前らのMVCは間違っている
Validações no Ruby on Rails
Yapc asia-2012-lt-thon
正月発火村に参加して変なJobQueueサーバー作った話
Mojolicious::Liteを使ってみよう
Mojoliciousでつくる! Webアプリ入門

Viewers also liked (20)

PPTX
de:code エスキュービズム勉強会0620
PDF
Objective-C/Swift コードの共用
PDF
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
PDF
2014年からSwiftを振り返る! #cswift
PDF
Technology for reduce of mistakes - うっかりをなくす技術
PDF
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
PDF
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
PDF
はじめてのiOSアプリ開発 ①
PDF
デザイナーとエンジニアが話す、iOSアプリケーション開発
PDF
㉚Xcodeを覚えよう!簡単なアプリを作ってみよう!
PDF
iOSアプリ開発 脱初心者に向けて
PDF
Xcodeとstoryboardのすごさを思い知る、ソースコードを書かないプログラミング
PDF
watchOS 2 新機能の細かい話
PDF
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
PDF
㉙iPhoneアプリ開発の基礎知識を覚えよう
PPTX
本当のオブジェクト指向は可読性を上げる
PDF
iPhone開発者初心者向け資料「XcodeのStoryboardで画面を作ろう!」
PDF
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
PDF
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
PDF
10分で分かるiOSアプリのつくりかた[ATGS主催イベント発表資料]
de:code エスキュービズム勉強会0620
Objective-C/Swift コードの共用
第7回 カジュアル Swift 勉強会 @ 青葉台 オープニング #cswift
2014年からSwiftを振り返る! #cswift
Technology for reduce of mistakes - うっかりをなくす技術
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
オプショナル型。〜なんとなく付ける ! ? 撲滅〜 改訂版
はじめてのiOSアプリ開発 ①
デザイナーとエンジニアが話す、iOSアプリケーション開発
㉚Xcodeを覚えよう!簡単なアプリを作ってみよう!
iOSアプリ開発 脱初心者に向けて
Xcodeとstoryboardのすごさを思い知る、ソースコードを書かないプログラミング
watchOS 2 新機能の細かい話
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
㉙iPhoneアプリ開発の基礎知識を覚えよう
本当のオブジェクト指向は可読性を上げる
iPhone開発者初心者向け資料「XcodeのStoryboardで画面を作ろう!」
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
10分で分かるiOSアプリのつくりかた[ATGS主催イベント発表資料]
Ad

Similar to ぼくがかんがえたさいきょうのMvc (20)

PDF
Backbonejs @BuildInsiderOffline #1
PDF
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
PDF
Head toward Java 15 and Java 16
PPT
20130924 Picomon CRH勉強会
PDF
Data APIを活かす JavaScript検索と管理画面のカスタマイズ
PDF
Head toward Java 16 (Night Seminar Edition)
PDF
本気で使うStack storm
PDF
Knockout を用いた Firefox OS アプリケーションの開発
PDF
Pythonと DataDogを 使って簡単な システムモニターリング (Pycon apac 2013)
PDF
SappoRo.R #3 LT: Shiny by RStudio
PDF
memcached proxy server development and operation
PDF
Jawsug chiba API Gateway
PPTX
インフラエンジニアなら『さくらのクラウド』をAPIでいじろう【入門編】
PDF
Using Ext Direct with SenchaTouch2
PDF
スターターライセンスではじめるAtlassian開発
PPTX
AZ障害を想定したブログのマイグレーション
PDF
iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する
PPTX
StackStormを活用した運用自動化の実践
PPTX
Azure のポータル画面で、AI フレーバな BOT の作成ハンズオン
PDF
Backbonejs @BuildInsiderOffline #1
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
Head toward Java 15 and Java 16
20130924 Picomon CRH勉強会
Data APIを活かす JavaScript検索と管理画面のカスタマイズ
Head toward Java 16 (Night Seminar Edition)
本気で使うStack storm
Knockout を用いた Firefox OS アプリケーションの開発
Pythonと DataDogを 使って簡単な システムモニターリング (Pycon apac 2013)
SappoRo.R #3 LT: Shiny by RStudio
memcached proxy server development and operation
Jawsug chiba API Gateway
インフラエンジニアなら『さくらのクラウド』をAPIでいじろう【入門編】
Using Ext Direct with SenchaTouch2
スターターライセンスではじめるAtlassian開発
AZ障害を想定したブログのマイグレーション
iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する
StackStormを活用した運用自動化の実践
Azure のポータル画面で、AI フレーバな BOT の作成ハンズオン
Ad

More from karupanerura (20)

PDF
Perl5 VS JSON
PDF
コンテキストと仲良く
PDF
The plan of Aniki 2.0
PDF
Aniki::Internal
PDF
The Crystal language *recently* update
PDF
KOWAZA for mackerel
PPTX
TIme::Moment+Time::Strptime=
PPTX
DateTimeX::Moment
PDF
Aniki has come
PDF
Optimize perl5 code for perfomance freaks
PDF
router-simple.cr
PDF
Why we use mruby with Perl5?
PDF
はかたの塩
PDF
Gotanda.pmの紹介
PDF
すいすいSwift
PDF
Perlにおけるclass実装パターン
PDF
モジュール開発におけるぼくの試行錯誤
PDF
Aniki - The ORM as our great brother.
PDF
Perl5 meta programming
PDF
mysqlcasual6-next-key-lock
Perl5 VS JSON
コンテキストと仲良く
The plan of Aniki 2.0
Aniki::Internal
The Crystal language *recently* update
KOWAZA for mackerel
TIme::Moment+Time::Strptime=
DateTimeX::Moment
Aniki has come
Optimize perl5 code for perfomance freaks
router-simple.cr
Why we use mruby with Perl5?
はかたの塩
Gotanda.pmの紹介
すいすいSwift
Perlにおけるclass実装パターン
モジュール開発におけるぼくの試行錯誤
Aniki - The ORM as our great brother.
Perl5 meta programming
mysqlcasual6-next-key-lock

ぼくがかんがえたさいきょうのMvc