Introduction to application architecture on asp.net mvc

42
Introduction to Application Architecture on ASP.NET MVC (仮) 福井 厚 Atsushi Fukui ( @afukui ) .NET FEST 2015 2015.9.26

Transcript of Introduction to application architecture on asp.net mvc

Page 1: Introduction to application architecture on asp.net mvc

Introduction to Application Architecture on ASP.NET MVC

(仮)

福井 厚 Atsushi Fukui ( @afukui )

.NET FEST 2015

2015.9.26

Page 2: Introduction to application architecture on asp.net mvc

本セッションの内容について

• 本セッションの内容は、発表者個人の経験に基づく個人的な意見であり、所属する団体、組織の公式な見解、発表ではありません。

• あくまでスピーカー本人の経験に基づく内容となっていることをご承知おきください。

Page 3: Introduction to application architecture on asp.net mvc

自己紹介

• 福井 厚 (ふくい あつし)

• @afukui

• メーカー系サポートでOS、言語などを担当後、ソフト開発会社でC/S型業務パッケージ、C/C++用ライブラリ等の開発を経験。94年にSIerへ転職し業務アプリケーションを多数開発、データベース設計支援、COM+による分散フレームワークの開発などを担当。外資系SIerに転職しソリューションアーキテクトとして.NETによる企業向けフレームワークの構築などを担当。2011年3月株式会社アークウェイに入社、プリンシパル コンサルタントとして企業向けソフト開発コンサルティングを行う。

2015年7月よりアマゾンデータサービスジャパン株式会社で Solutions Architect として活動。

• 2008年8月、Microsoft Certified Architect for Solutions Certification (MCA) に認定される。

• マイクロソフトMVPアワード受賞歴11回(2015年7月にMVP 終了)

Page 4: Introduction to application architecture on asp.net mvc

個人ロール年表

1980 1990 2000 2010

カスタマサポートフィールドSE

ソフトウェアデベロッパー

純国産システムエンジニア

外資系アーキテクト

開発コンサルタント

クラウド ソリューションアーキテクト

Page 5: Introduction to application architecture on asp.net mvc

アジェンダ

• コンテキスト

• アーキテクチャとは何か

• アーキテクチャ検討ポイント(ASP.NET MVC 編)

• まとめ

Page 6: Introduction to application architecture on asp.net mvc

コンテキスト

• 本セッションのテーマ• ASP.NET MVC アプリケーションのアーキテクチャ ポイント

• 標準で提供されている機能に絞って紹介

• 用語(アーキテクチャ)• このセッションではアーキテクチャを主にソフトウェア アーキテクチャの意味

で使っています。

• 対象• 企業向けアプリケーション開発を行っているアーキテクト、設計者、開発者

• レベル 200 のイントロダクションです。

• 正解を教えるセッションではありません。

Page 7: Introduction to application architecture on asp.net mvc

アーキテクチャとは何か

Page 8: Introduction to application architecture on asp.net mvc

アーキテクチャとは ISO/IEC/IEEE 42010(IEEE 1471改定版)

http://www.iso-architecture.org/ieee-1471/cm/

Page 9: Introduction to application architecture on asp.net mvc

アーキテクチャは階層構造• 企業全体のアーキテク

チャから実装コードまですべてがアーキテクチャ

Page 10: Introduction to application architecture on asp.net mvc

アーキテクチャ ≠ フレームワーク

• フレームワークを利用することがアーキテクチャを作ることではありません

• 目的と制約に従って必要な品質特性を満たすソフトウェアの構造を定義し共通利用する機能を提供するものがアーキテクチャ• 従って目的と制約が異なれば違うアーキテクチャが必要です。

Page 11: Introduction to application architecture on asp.net mvc

正しいアーキテクチャを構築するために

• 要求定義

• フィーチャーの抽出

• 実装検証

Page 12: Introduction to application architecture on asp.net mvc

アーキテクチャ要求定義

• 目的の整理• アーキテクチャを構築する目的は何か• ステークホルダーごとに要求は異なる• アーキテクチャが解決すべき課題は何か

• 満たすべき品質特性• 重視するソフトウェアの品質特性は何か

• 制約• 組織、環境、過去の資産、開発者のスキル、政治的

なしがらみなど、どのような制約があるか

• 利用技術の選定• 長く使える技術を見極める

Page 13: Introduction to application architecture on asp.net mvc

ソフトウェア品質特性 ISO/IEC 25010(IEEE9126 の改定)

• どの品質特性と副特性を重視するか

© 2015 iso25000.com

Page 14: Introduction to application architecture on asp.net mvc

フィーチャーの抽出

• 目的に従ってアーキテクチャが提供すべきフィーチャーを抽出

• オプションとマンダトリの整理

• フィーチャーと品質特性のマッピング

• 抽出したフィーチャーで重視する品質特性を満たしているかを確認する

Page 15: Introduction to application architecture on asp.net mvc

実装検証

• 抽出したフィーチャーがアーキテクチャ要求を満たしていることを検証

• セキュリティ• 想定されるケースでの認証、認可は必須

• パフォーマンス• パフォーマンスは測るまで誰にも分らない

• 限界点を知る

• システムにとって最も難しい機能から検証する• クラウドの新機能活用や新しい認証基盤の利用など、過去にやったことがな

いものは失敗するかもしれないことを前提に必ず検証する

Page 16: Introduction to application architecture on asp.net mvc

アーキテクチャ検討ポイントASP.NET MVC 編

Page 17: Introduction to application architecture on asp.net mvc

アーキテクチャ検討ポイント

• UIデータバインド

• バリデーション

• 例外処理

• 認証・認可

• データアクセス

Page 18: Introduction to application architecture on asp.net mvc

UI データバインド

• サーバーサイド レンダリング• ASP.NET MVC では View を生成する処理

• Razor テンプレートをもとに動的にHTML を生成

• クライアントサイド データ バインディング• クライアント JavaScript から非同期でデータを取得

• HTML DOM にデータをバインド

Page 19: Introduction to application architecture on asp.net mvc

UI データバインド

Web Server /App Server

Browser DB Server

サーバーサイド レンダリング

• 動的にHTMLページを組み立て• データアクセスした結果をページの挿入• 生成したページを送信

生成したHTML

HTTP GET リクエスト

• 生成されたHTMLをブラウザで表示

Page 20: Introduction to application architecture on asp.net mvc

UI データバインド

Web Server /App Server

Browser DB Server

クライアントサイド データ バインディング

• Web サービスを公開• データアクセスした結果をJSONとして返

JSONデータ

ajax GET リクエスト

• 取得したJSONデータをHTMLDOMにバインド

Page 21: Introduction to application architecture on asp.net mvc

UI データバインド

メリット デメリット

サーバーサイドレンダリング

• 単一のプログラミング パラダイム

• サーバーサイドでのみ実現可能な処理• 認証、認可• ブラウザの言語判定

• 状態情報をサーバー側で保持するためサーバーメモリを消費

• 負荷分散時の状態情報の保持でパフォーマンスが低下

• リクエスト数の増加でレンダリング処理の負荷が増大

クライアントデータバインド

• 状態を HTML DOM に保存することでエラー発生時に再送が可能

• サーバーサイドのメモリを節約

• レンダリング処理をクライアント側で行うため、サーバーの負荷を削減

• 非同期のためデータバインドが遅延する可能性あり

• 複数のプログラミング パラダイムが必要

Page 22: Introduction to application architecture on asp.net mvc

Demo

Page 23: Introduction to application architecture on asp.net mvc

バリデーション

• クライアントサイド バリデーション• jQuery Validation

• サーバーサイド バリデーション• ModelState プロパティ

• Entity クラスの Attribute

Page 24: Introduction to application architecture on asp.net mvc

Demo

Page 25: Introduction to application architecture on asp.net mvc

例外処理

• 例外は原則として集約的に捕捉して処理する

• Web API の例外処理• Web API 2.2 Global Error Handling

• Web API のパイプラインで発生したすべての例外を補足

• 以下のインターフェイスを継承• IExceptionLogger

• IExceptionHandler

• それ以外の例外処理• Global.asax の Application_Error イベントハンドラ

• IIS、ASP.NET で発生した例外を補足

Page 26: Introduction to application architecture on asp.net mvc

Demo

Page 27: Introduction to application architecture on asp.net mvc

認証・認可

• Windows 認証• IIS の統合認証を有効化

• Web.config の system.web/authentication の mode=“window”

• Cookie Authentication• OWIN Authentication メソッド

• Cookie Authentication (Form 認証)

• External Sign in Cookie (Oauth 2.0 認証)

• Two Factor Sign In Cookie

• Organization Authentication• Azure AD ドメイン

• オンプレミス ADFS

Page 28: Introduction to application architecture on asp.net mvc

External Sign in 認証 手順 (google IDの例)

Page 29: Introduction to application architecture on asp.net mvc

External Sign in 認証 手順 (google IDの例)

Page 30: Introduction to application architecture on asp.net mvc

External Sign in 認証 手順 (google IDの例)

Page 31: Introduction to application architecture on asp.net mvc

External Sign in 認証 手順 (google IDの例)

Page 32: Introduction to application architecture on asp.net mvc

External Sign in 認証 手順 (google IDの例)

Page 33: Introduction to application architecture on asp.net mvc

External Sign in 認証 手順 (google IDの例)

Page 34: Introduction to application architecture on asp.net mvc

External Sign in 認証 手順 (google IDの例)

ClientIId、Client Secret が生成される

Page 35: Introduction to application architecture on asp.net mvc

External Sign in 認証 手順 (google IDの例)

• Startup.Auth.cs 内の処理を有効化• 利用する Open ID のコメントを外し、Client Id、Client Secret を追加

app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions(){

ClientId = “your client id",ClientSecret = “your client secret"

});

Page 36: Introduction to application architecture on asp.net mvc

Demo

Page 37: Introduction to application architecture on asp.net mvc

データアクセス

• Entity Framework を活用• JSONで集約オブジェクトのコレクションを追加すればEFが自動的に親子テー

ブルにデータを追加してくれる

• Entity Framework 7 に備えて• Code First From Database を選択

• EF7 では EDMX が無くなる

• DBを変更した場合は Entity クラスを生成し直し

Page 38: Introduction to application architecture on asp.net mvc

データアクセス

• テーブル間のリレーションシップから生成されるナビゲーション プロパティの相互参照に注意• Costomer と Order など相互にナビゲーション プロパティを持つものは、デ

フォルトのJsonシリアライザの設定で循環参照例外が発生

• WebApiConfig.cs の Register メソッドに Json.NET のシリアライザ設定を変更する

config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

Page 39: Introduction to application architecture on asp.net mvc

Demo

Page 40: Introduction to application architecture on asp.net mvc

まとめ

• アーキテクチャは容易には変更できないので長いスパンで利用できる技術を選択する

• アーキテクチャの選択は常にトレードオフがある

• 選択した理由を説明できることが重要

Page 41: Introduction to application architecture on asp.net mvc

Q & A

Page 42: Introduction to application architecture on asp.net mvc

ご清聴ありがとうございました