SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
プロジェクトにMVVMを適用する
狙い
KnockoutJS勉強会 2014年5月17日
自己紹介
中規模業務系Webシステムのリプレースプロ
ジェクトを、従来型Webシステム+Ajaxで準備
していたが、突然、SPAっぽくやることに。
クライアントサイドフレームワークを検討。
各種勉強会に出まくって情報収集
従来型とのハイブリッドでも適合しそうな
KnockoutJSの採用を決定し準備。
現在、実装メンバーと合流し実装着手。
経緯
今回の趣旨
プロジェクトの方針説明的な
従来型Webからクライアントサイドにっ
重心を移動した場合の構成について
ターゲット
「SPAっぽいのでやってよ」って突然
振られそうな空気を感じている人
最近突然湧きあがったjQuery批判に戸
惑いを隠せない人
私の今のプロジェクトに参加しそうな
人
アジェンダ
KnockoutJSって何?
MVVM?
Webシステムの構成の変遷
手ごたえ
とは
 JavaScriptのクライアントサイドフレームワーク
 Microsoftの社員の一人がOSSとして開発そうな。
MS製ではないが関連は深いとか。
 MVVMのアーキテクチャパターンを採用
Ajax通信メインの
SinglePageApplication/MultiPageApplicationを作りや
すい
 宣言型バインディングによるリアクティブプログラミングの
スタイル
Model-Driven-View
 Angular.js、Backbone.jsと比較
MVVMとは
アプリケーションをModel-View-ViewModelに分割するアプ
リケーションのアーキテクチャパターンの手法
 Modelとは
定義としては、ドメイン領域のデータを具現化したオブ
ジェクト。
Viewとは
可視化できる画面。データの入出力部分。
View-Modelの状態を常に画面に反映し続ける。
 View-Modelとは
ModelとViewの橋渡し的存在。
ViewがModelのデータをViewからバインディングできる
ようにする役割。
(ボクが考える)MVVM概念図
• ViewはViewModelをデータバインディングで追従。
• ViewModelを監視して、変更を自動的に反映する
• ViewModelはViewを知らない(依存しない)。Modelの情報を監視
可能(Observable)な状態にして、外部(View)に提供する。
• Modelは他の存在を気にせず、依存もしない。
• 主にビジネス領域のデータを格納するだけ。
データバインディングの例
価格:<input type=“text” data-bind=“value:price” id=“priceText”>
消費税率:<span data-bind=“text:taxRate” id=“taxSpan”> % <hr>
税込金額:<span data-bind=“text:taxIncluded” id=“taxIncludedSpan”> 円
1000価格:
8消費税率: %
税込金額: 1080 円
function SomeViewModel(){
this.price = ko.observable(1000);
this.taxRate = ko.observable(8);
this.taxInclude=ko.computed(function(){
return calcTaxRate(this.price,this.taxRate);
});
}
価格を2000にすると、税込金額は2160に変わる
data-binding
MVVMとデータバインディングのうまみ
 Viewからロジックを追い出せる。分離できる。
 data-bindingでViewModelの変数やメソッドを指定するだけ
 Viewのコントロール同士の連携をシンプルにできる。
 Viewのレイアウト変更にロジックが影響を受けない。
 処理の起点がView(DOM)にない。
 ViewはViewModelを追いかけているだけ。
 DOMはViewModelの変更を受けて勝手に変わる。そこがリアクティブ。
 ViewModelの使いまわしが可能。
 ViewModelはViewに依存しない。
 Viewにデータを置かなくていい。
 データはViewModelで管理して、最終的にModelに反映。
 Ajax通信時にFormからJSONやQueryStringを組み立てる必要がない。
 それがいろいろはかどる!
jQueryのオンリー構成
 まず初めに対象のデータを選ぶDOMを選んでから処理を実行
 $(“#price”).change(calcTaxInclude);
 レイアウトが変わると、、、
 val =
$(this).closest(“table”).children(“span.target”).text(“Changed!”);
 いろいろはかどらなくなったり
 UnitTestでブラウザが必須だったり
$(function(){
$document.on(”change”, “.target”,(function(e){…}));
});
とか、テストフレームワークでテストできないロジック書いてしまいがち。
例えば、こんな画面
製品マスタに構成部品を追加する。
「追加」で一覧に登録
できれば「登録」で親子を一括登録し
たい。
従来型:ブラウザRequestで画面書き換え型
製品登録
製品情報退避
serverclient
追加
Session
部品追加
画面
DB
製品登録
追加部品情報退避
製品情報取り出し
永続化処理
追加 登録
一部Ajaxを取り入れた
DOMベースのJavaScript活用型
製品登録
serverclient
追加
部品追加
画面
DB
永続化処理
登録
追加
$(“部品1”).data(“code”,”FRAME1000”)
$(“部品2”).data(“code”,”TIRE1000”)
$(“部品3”).data(“code”,”CMP1000”)
製品登録
<inupt type=“hidden” name=“部品1”>
<input type=“hidden” name=“部品2>
<input type=“hidden” name=“部品3>
POST/GET
OR
View
ViewModel
ViewMod
el
ViewMod
el
ViewMod
elModel
今回
MVVM活用でのクライアントデータ保持型
製品登録
serverclient
追加 部品追加
画面
DBDataAccess
登録
追加
{
product:製品データ,
部品Array:[部品1,部品2,部品3,部品4,部品5]
}
Data-Bind
Ajax通信
(JSON)
jQueryとの連携
 Ajax通信はKnockout範囲外でDeferred/Promiseを活用。
 DOMを直接指定して操作するScriptは使わない。
 ViewModelはViewのことは知らない。一方的に呼び出されるだけ。
 jQueryのプラグインはどう使う?
 バインディングの自作。カスタムバインディングの中で呼び出す。
 カスタムバインディング中では、定義されているDOMがわかる。
 Viewを動かすのはすべてKnockoutの範囲内にする?
 ビジネスロジックに一切からまない見た目だけの処理は
document.readyでベタに書くのもありかと。
 マウスオーバーで表示領域を拡大するとか。
手応え
 メリット
 ViewModel/ModelをそのままJSONとして投げられるのは楽
クライアント側のhiddenでデータ持ちまわす泥臭さがなくなった。
画面非表示になった削除対象キーも裏で保持しておける。
 クライアント側で状態を持つため、複数Windowを開かれた場合の対応が
楽
 データと表示フォーマットの分離
Viewの責務をサーバー側から追い出すことができた。
和暦入出力の変換処理がサーバー側で不要になった。
Model/ViewModelはDate⇔CustomBindingで和暦に変換⇔HTMLは和暦
 悩みどころ
 表示完了までのワンテンポのずれ
HTMLがロードされた後、ko.bidingContext時にDOMが動く。
FOUCっぽい現象。現在調整中。
ありがとうございました

Contenu connexe

Tendances

エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Akira Inoue
 

Tendances (20)

React.js + Flux
React.js + FluxReact.js + Flux
React.js + Flux
 
Vue.jsでさくっとMVVM
Vue.jsでさくっとMVVMVue.jsでさくっとMVVM
Vue.jsでさくっとMVVM
 
はじめてのVue.js
はじめてのVue.jsはじめてのVue.js
はじめてのVue.js
 
( ゚∀゚)o彡° Flux! Flux!
( ゚∀゚)o彡° Flux! Flux!( ゚∀゚)o彡° Flux! Flux!
( ゚∀゚)o彡° Flux! Flux!
 
AngularJSを浅めに紹介します
AngularJSを浅めに紹介しますAngularJSを浅めに紹介します
AngularJSを浅めに紹介します
 
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門
 
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
 
~初心者がこれから Web アプリの開発をするために~
~初心者がこれから Web アプリの開発をするために~~初心者がこれから Web アプリの開発をするために~
~初心者がこれから Web アプリの開発をするために~
 
RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
 
Brush up your Coding! 2013 winter
Brush up your Coding! 2013 winterBrush up your Coding! 2013 winter
Brush up your Coding! 2013 winter
 
DevLOVE Kansai KnockoutJS
DevLOVE Kansai KnockoutJSDevLOVE Kansai KnockoutJS
DevLOVE Kansai KnockoutJS
 
ASP.NET MVC プログラミング入門の入門
ASP.NET MVC プログラミング入門の入門ASP.NET MVC プログラミング入門の入門
ASP.NET MVC プログラミング入門の入門
 
React を導入した フロントエンド開発
React を導入したフロントエンド開発React を導入したフロントエンド開発
React を導入した フロントエンド開発
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
 
簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)簡単AngularJS(関西AngularJS勉強会)
簡単AngularJS(関西AngularJS勉強会)
 
Asp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソAsp Net Mvc 基礎のキソ
Asp Net Mvc 基礎のキソ
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVM
 

Similaire à KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い

One ASP.NET の今とこれから
One ASP.NET の今とこれからOne ASP.NET の今とこれから
One ASP.NET の今とこれから
Akira Inoue
 
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたパララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
Shumpei Shiraishi
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
normalian
 
AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 -
SORACOM, INC
 

Similaire à KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い (20)

One ASP.NET の今とこれから
One ASP.NET の今とこれからOne ASP.NET の今とこれから
One ASP.NET の今とこれから
 
MvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かうMvcのFatモデルに立ち向かう
MvcのFatモデルに立ち向かう
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
 
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかたパララックスでレスポンシブでJ query mobileなサイトのつくりかた
パララックスでレスポンシブでJ query mobileなサイトのつくりかた
 
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
ASP.NET vNext / Visual Studio "14" に見る .NET の未来像
 
ASP.NET Core 概要(2017年3月時点)
ASP.NET Core 概要(2017年3月時点)ASP.NET Core 概要(2017年3月時点)
ASP.NET Core 概要(2017年3月時点)
 
PHPerでもわかる!実践Webアクセシビリティ
PHPerでもわかる!実践WebアクセシビリティPHPerでもわかる!実践Webアクセシビリティ
PHPerでもわかる!実践Webアクセシビリティ
 
Hello, Node.js
Hello, Node.jsHello, Node.js
Hello, Node.js
 
PHP-Ninjaの裏側
PHP-Ninjaの裏側PHP-Ninjaの裏側
PHP-Ninjaの裏側
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
 
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
 
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
 
クラウド時代のインフラ動向
クラウド時代のインフラ動向クラウド時代のインフラ動向
クラウド時代のインフラ動向
 
[AC06] クラウド・ネイティブなスケーラブル・アプリ開発のために~12 Factor App on Kubernetes on Azure
[AC06] クラウド・ネイティブなスケーラブル・アプリ開発のために~12 Factor App on Kubernetes on Azure[AC06] クラウド・ネイティブなスケーラブル・アプリ開発のために~12 Factor App on Kubernetes on Azure
[AC06] クラウド・ネイティブなスケーラブル・アプリ開発のために~12 Factor App on Kubernetes on Azure
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 -
 
Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0Progressive Framework Vue.js 2.0
Progressive Framework Vue.js 2.0
 
Cloud Native Application on DEIS by using 12 factor
Cloud Native Application on DEIS by using 12 factorCloud Native Application on DEIS by using 12 factor
Cloud Native Application on DEIS by using 12 factor
 
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
 
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
【第33回コンピュータビジョン勉強会@関東】OpenVX、 NVIDIA VisionWorks使ってみた
 

Dernier

Dernier (11)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い