SlideShare a Scribd company logo
Introduction to Application
Architecture on ASP.NET MVC
(仮)
福井 厚 Atsushi Fukui ( @afukui )
.NET FEST 2015
2015.9.26
本セッションの内容について
• 本セッションの内容は、発表者個人の経験に基づく個人的な意見で
あり、所属する団体、組織の公式な見解、発表ではありません。
• あくまでスピーカー本人の経験に基づく内容となっていることをご承
知おきください。
自己紹介
• 福井 厚 (ふくい あつし)
• @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 終了)
個人ロール年表
1980 1990 2000 2010
カスタマサポート
フィールドSE
ソフトウェア
デベロッパー
純国産システムエンジニア
外資系
アーキテクト
開発
コンサルタント
クラウド ソリューション
アーキテクト
アジェンダ
• コンテキスト
• アーキテクチャとは何か
• アーキテクチャ検討ポイント(ASP.NET MVC 編)
• まとめ
コンテキスト
• 本セッションのテーマ
• ASP.NET MVC アプリケーションのアーキテクチャ ポイント
• 標準で提供されている機能に絞って紹介
• 用語(アーキテクチャ)
• このセッションではアーキテクチャを主にソフトウェア アーキテクチャの意味
で使っています。
• 対象
• 企業向けアプリケーション開発を行っているアーキテクト、設計者、開発者
• レベル 200 のイントロダクションです。
• 正解を教えるセッションではありません。
アーキテクチャとは何か
アーキテクチャとは ISO/IEC/IEEE 42010(IEEE 1471改定版)
http://www.iso-architecture.org/ieee-1471/cm/
アーキテクチャは階層構造
• 企業全体のアーキテク
チャから実装コードまで
すべてがアーキテクチャ
アーキテクチャ ≠ フレームワーク
• フレームワークを利用することがアーキテクチャを作ることではあり
ません
• 目的と制約に従って必要な品質特性を満たすソフトウェアの構造を
定義し共通利用する機能を提供するものがアーキテクチャ
• 従って目的と制約が異なれば違うアーキテクチャが必要です。
正しいアーキテクチャを構築するために
• 要求定義
• フィーチャーの抽出
• 実装検証
アーキテクチャ要求定義
• 目的の整理
• アーキテクチャを構築する目的は何か
• ステークホルダーごとに要求は異なる
• アーキテクチャが解決すべき課題は何か
• 満たすべき品質特性
• 重視するソフトウェアの品質特性は何か
• 制約
• 組織、環境、過去の資産、開発者のスキル、政治的
なしがらみなど、どのような制約があるか
• 利用技術の選定
• 長く使える技術を見極める
ソフトウェア品質特性 ISO/IEC 25010(IEEE9126 の改定)
• どの品質特性と副特性を重視するか
© 2015 iso25000.com
フィーチャーの抽出
• 目的に従ってアーキテクチャが提供すべきフィーチャーを抽出
• オプションとマンダトリの整理
• フィーチャーと品質特性のマッピング
• 抽出したフィーチャーで重視する品質特性を満たしているかを確認
する
実装検証
• 抽出したフィーチャーがアーキテクチャ要求を満たしていることを検
証
• セキュリティ
• 想定されるケースでの認証、認可は必須
• パフォーマンス
• パフォーマンスは測るまで誰にも分らない
• 限界点を知る
• システムにとって最も難しい機能から検証する
• クラウドの新機能活用や新しい認証基盤の利用など、過去にやったことがな
いものは失敗するかもしれないことを前提に必ず検証する
アーキテクチャ検討ポイント
ASP.NET MVC 編
アーキテクチャ検討ポイント
• UIデータバインド
• バリデーション
• 例外処理
• 認証・認可
• データアクセス
UI データバインド
• サーバーサイド レンダリング
• ASP.NET MVC では View を生成する処理
• Razor テンプレートをもとに動的にHTML を生成
• クライアントサイド データ バインディング
• クライアント JavaScript から非同期でデータを取得
• HTML DOM にデータをバインド
UI データバインド
Web Server /
App Server
Browser DB Server
サーバーサイド レンダリング
• 動的にHTMLページを組み立て
• データアクセスした結果をページの挿入
• 生成したページを送信
生成したHTML
HTTP GET リクエスト
• 生成されたHTMLをブラウザで
表示
UI データバインド
Web Server /
App Server
Browser DB Server
クライアントサイド データ バインディング
• Web サービスを公開
• データアクセスした結果をJSONとして返
却
JSONデータ
ajax GET リクエスト
• 取得したJSONデータをHTML
DOMにバインド
UI データバインド
メリット デメリット
サーバーサイド
レンダリング
• 単一のプログラミング パラダイム
• サーバーサイドでのみ実現可能な
処理
• 認証、認可
• ブラウザの言語判定
• 状態情報をサーバー側で保持するた
めサーバーメモリを消費
• 負荷分散時の状態情報の保持でパ
フォーマンスが低下
• リクエスト数の増加でレンダリング処理
の負荷が増大
クライアント
データバインド
• 状態を HTML DOM に保存すること
でエラー発生時に再送が可能
• サーバーサイドのメモリを節約
• レンダリング処理をクライアント側
で行うため、サーバーの負荷を削
減
• 非同期のためデータバインドが遅延す
る可能性あり
• 複数のプログラミング パラダイムが必
要
Demo
バリデーション
• クライアントサイド バリデーション
• jQuery Validation
• サーバーサイド バリデーション
• ModelState プロパティ
• Entity クラスの Attribute
Demo
例外処理
• 例外は原則として集約的に捕捉して処理する
• Web API の例外処理
• Web API 2.2 Global Error Handling
• Web API のパイプラインで発生したすべての例外を補足
• 以下のインターフェイスを継承
• IExceptionLogger
• IExceptionHandler
• それ以外の例外処理
• Global.asax の Application_Error イベントハンドラ
• IIS、ASP.NET で発生した例外を補足
Demo
認証・認可
• 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
External Sign in 認証 手順 (google IDの例)
External Sign in 認証 手順 (google IDの例)
External Sign in 認証 手順 (google IDの例)
External Sign in 認証 手順 (google IDの例)
External Sign in 認証 手順 (google IDの例)
External Sign in 認証 手順 (google IDの例)
External Sign in 認証 手順 (google IDの例)
ClientIId、Client Secret が生成される
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"
});
Demo
データアクセス
• Entity Framework を活用
• JSONで集約オブジェクトのコレクションを追加すればEFが自動的に親子テー
ブルにデータを追加してくれる
• Entity Framework 7 に備えて
• Code First From Database を選択
• EF7 では EDMX が無くなる
• DBを変更した場合は Entity クラスを生成し直し
データアクセス
• テーブル間のリレーションシップから生成されるナビゲーション プロ
パティの相互参照に注意
• Costomer と Order など相互にナビゲーション プロパティを持つものは、デ
フォルトのJsonシリアライザの設定で循環参照例外が発生
• WebApiConfig.cs の Register メソッドに Json.NET のシリアライザ設定
を変更する
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling
= Newtonsoft.Json.ReferenceLoopHandling.Ignore;
Demo
まとめ
• アーキテクチャは容易には変更できないので長いスパンで利用でき
る技術を選択する
• アーキテクチャの選択は常にトレードオフがある
• 選択した理由を説明できることが重要
Q & A
ご清聴ありがとうございました

More Related Content

PPTX
Windows10とRaspberryPiで MakerFaireTokyoに参加
PDF
.NET Coreとツール類の今
PDF
.NET の今 ~ 最新アップデートと 2019 年の展望
PDF
Visual Studio 2015 リリース記念 勉強会 universal windows platform app
PDF
Visual Studio 拡張機能の作り方
PPTX
.NET Micro Framework is my spirit.
PPTX
新しい Visual Studio & .NET と新時代のアーキテクチャ
PDF
.NET Micro Framework (プラレールと電子工作)
Windows10とRaspberryPiで MakerFaireTokyoに参加
.NET Coreとツール類の今
.NET の今 ~ 最新アップデートと 2019 年の展望
Visual Studio 2015 リリース記念 勉強会 universal windows platform app
Visual Studio 拡張機能の作り方
.NET Micro Framework is my spirit.
新しい Visual Studio & .NET と新時代のアーキテクチャ
.NET Micro Framework (プラレールと電子工作)

What's hot (20)

PPTX
20150926 uwpストア攻略
PDF
めとべや東京10 Universal Windows Platform appの新しいバインディング
PPTX
How tousemicrosoftsearch 20200725
PDF
20150905 stream analytics
PDF
開発支援ツールとは?
PPTX
WindowsにおけるUIスレッドの基礎
PDF
Macアプリのインストーラ作成ツールSwift版
PDF
Xcode以外の開発環境 AppCodeの紹介
PDF
20150530 めとべや東京8 universal windows platform appの画面開発
PDF
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
PDF
10分で(だいたい)わかるMicrosoft MVP アワードプログラム
PDF
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
PPTX
(管理者向け) Microsoft Edge の展開と管理の手法
PDF
Docker on azure!進化していくcontainerを覗いてみよう!
PPTX
.NET開発者のためのMicrosoft Learn入門
PPTX
.Netlab202107
PDF
Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!
PDF
お気に入り拡張機能
PDF
これから始める Bot Builder 開発のコツと舞台裏
PPTX
社内の遊休PCをAzurePipelinesでCICDに活用しよう
20150926 uwpストア攻略
めとべや東京10 Universal Windows Platform appの新しいバインディング
How tousemicrosoftsearch 20200725
20150905 stream analytics
開発支援ツールとは?
WindowsにおけるUIスレッドの基礎
Macアプリのインストーラ作成ツールSwift版
Xcode以外の開発環境 AppCodeの紹介
20150530 めとべや東京8 universal windows platform appの画面開発
【de:code 2020】 Azure Bot Services を使って Teams bot を開発する
10分で(だいたい)わかるMicrosoft MVP アワードプログラム
ASP.NET CoreとAzure AD B2Cを使ったサクっと認証
(管理者向け) Microsoft Edge の展開と管理の手法
Docker on azure!進化していくcontainerを覗いてみよう!
.NET開発者のためのMicrosoft Learn入門
.Netlab202107
Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!
お気に入り拡張機能
これから始める Bot Builder 開発のコツと舞台裏
社内の遊休PCをAzurePipelinesでCICDに活用しよう
Ad

Viewers also liked (19)

PDF
UnityでC#を勉強しはじめた私の主張
PDF
わかば向けAzure
PDF
ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~
PPTX
C#とILとネイティブと
PPTX
Clash of Oni Online - VR Multiplay Sword Action
PDF
IL2CPPに関する軽い話
ODP
Unity入門講座その3
PDF
Async design with Unity3D
ODP
Unity入門講座その2
ODP
Unity入門講座その1
PDF
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
PDF
Unityで覚えるC#
PDF
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
PDF
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
PPTX
ゲーム制作初心者が知るべき8つのこと
PPTX
RuntimeUnitTestToolkit for Unity
PDF
【 #Unity会 】このUnityがすごい2015年版
PDF
NextGen Server/Client Architecture - gRPC + Unity + C#
PDF
情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)
UnityでC#を勉強しはじめた私の主張
わかば向けAzure
ここが変わる!Unity 5のスマホ開発  ~アセットバンドル、ビルド、プラグイン~
C#とILとネイティブと
Clash of Oni Online - VR Multiplay Sword Action
IL2CPPに関する軽い話
Unity入門講座その3
Async design with Unity3D
Unity入門講座その2
Unity入門講座その1
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Unityで覚えるC#
個人開発でゲーム一本完成させるまでの苦難の道のり 〜企画編〜
Photon Server Deep Dive - PhotonWireの実装から見つめるPhotonServerの基礎と応用
ゲーム制作初心者が知るべき8つのこと
RuntimeUnitTestToolkit for Unity
【 #Unity会 】このUnityがすごい2015年版
NextGen Server/Client Architecture - gRPC + Unity + C#
情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)
Ad

Similar to Introduction to application architecture on asp.net mvc (20)

PDF
20150221 めとべや東京-プライベートコード共有サービス
PPTX
20110924 shizuoka azure-forsharing
PDF
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
PPTX
20120425
PPTX
Azure Application Insights とか
PDF
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
PPT
20080524
PDF
Application Architecture for Enterprise Win Store Apps with DDD Pattern
PDF
.NET の過去、現在、そして未来
PDF
はじめての ASP.NET MVC
PDF
Agile 459 | 11/17 資料
PPTX
Windows Phoneの 企業内活用方法、 社内向けアプリ開発と展開
PDF
Mvc conf session_4_ono
PPTX
Clrh 110827 wfho
PDF
Active Directory 最新情報 2012.8.31 暫定版
PDF
【17-D-6】.NETアセンブリの宿命
PDF
OAuth2.0によるWeb APIの保護
PPTX
20110607
PDF
2011年マイクロソフト テクノロジー振り返り~開発編~
PPTX
Java/Android開発者のためのWindows Azure入門 (パート2)
20150221 めとべや東京-プライベートコード共有サービス
20110924 shizuoka azure-forsharing
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
20120425
Azure Application Insights とか
XAML と C# を使った Windows ストアアプリ(LOB)構築のためのtips Prism 4.5 & Kona project 等のご紹介
20080524
Application Architecture for Enterprise Win Store Apps with DDD Pattern
.NET の過去、現在、そして未来
はじめての ASP.NET MVC
Agile 459 | 11/17 資料
Windows Phoneの 企業内活用方法、 社内向けアプリ開発と展開
Mvc conf session_4_ono
Clrh 110827 wfho
Active Directory 最新情報 2012.8.31 暫定版
【17-D-6】.NETアセンブリの宿命
OAuth2.0によるWeb APIの保護
20110607
2011年マイクロソフト テクノロジー振り返り~開発編~
Java/Android開発者のためのWindows Azure入門 (パート2)

More from Atsushi Fukui (11)

PDF
「リモートペアプロでマントルを突き抜けろ!」AWS Cloud9でリモートペアプロ&楽々サーバーレス開発
PDF
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
PDF
20170809 AWS code series
PPTX
Introducing C# in AWS Lambda
PDF
VSUGアーキテクトパネル アーキテクトはテクノロジーの進化にどのように対応してきたか
PDF
Architecture driven development のすすめ
PPTX
Entity Framework 5.0 deep dive
PDF
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
PDF
鉄人28号と私
PDF
13_B_5 Who is a architect?
PDF
Vsug Leaders Summit 2008:A.Fukui
「リモートペアプロでマントルを突き抜けろ!」AWS Cloud9でリモートペアプロ&楽々サーバーレス開発
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
20170809 AWS code series
Introducing C# in AWS Lambda
VSUGアーキテクトパネル アーキテクトはテクノロジーの進化にどのように対応してきたか
Architecture driven development のすすめ
Entity Framework 5.0 deep dive
VSUG Day 2010 Summer - Using ADO.NET Entity Framework
鉄人28号と私
13_B_5 Who is a architect?
Vsug Leaders Summit 2008:A.Fukui

Introduction to application architecture on asp.net mvc