業務アプリケーション開発を支える.net技術 #ngtnet
Post on 12-Apr-2017
3.746 Views
Preview:
TRANSCRIPT
業務アプリケーション開発
を支える.NET技術
2015/10/10 - #ngtnet
TAKANO Sho(高野 将)/ @masaru_b_cl
アーキテクチャの選択
Windowsフォームを使った
3階層リッチクライアントアプリケーション
#ngtnet 10
※.NET におけるアプリケーション アーキテクチャ ガイド 2.0 - 第19章 : 物理ティアと配置 よりhttp://www.microsoft.com/ja-jp/dev/2010/solutions/architecture/default.aspx
dllファイルを直接配布
#ngtnet 16
※チーム開発でもパッケージ管理を容易に! NuGetを活用してライブラリを効果的に配布しようhttp://codezine.jp/article/detail/8735 より
ライブラリ配布あるある
なんかうまく動かないんですが
こっちでは大丈夫なので、dllファイルの日付教
えて下さい
なんかうまく動かないんですが
Hoge.dllが増えたので追加してください
なんか(ry
#ngtnet 17
NuGetの利用
NuGet
https://www.nuget.org/
“NuGet is the package manager for the Microsoft
development platform including .NET. ”
(NuGetは.NETを含むマイクロソフトの
開発プラットフォーム向けパッケージマネージャーです)
#ngtnet 18
パッケージマネージャーとは
ライブラリの導入をサポートし、
管理するためのツール
ライブラリをパッケージとしてまとめる
バージョン、依存する他のパッケージなどの情報を含む
パッケージはリポジトリーに登録する
リポジトリーからパッケージを追加、更新、削除する
#ngtnet 19
NuGetの利用
依存関係のあるライブラリ配布が漏れる
⇒ 依存パッケージも一緒に導入される
問題が発生したバージョンが特定できない
⇒ パッケージにはバージョンが必須
ライブラリ更新が漏れる
⇒ ツールから更新可能
#ngtnet 20
NuGetによる配布
#ngtnet 21
※チーム開発でもパッケージ管理を容易に! NuGetを活用してライブラリを効果的に配布しようhttp://codezine.jp/article/detail/8735 より
NuGetのさらなる活用
ライブラリだけでなく業務機能も
NuGetパッケージで管理する
不具合対応などを行う際の対象バージョンが
明確になる
機能間の循環参照を検知及び防止できる
(循環参照:相互に依存関係がある状態)
#ngtnet 22
NuGet利用時の注意
バージョン運用ルールを定め、
順守する必要がある
例)異なるソースで同一バージョンの
パッケージを作らない
「プロジェクト参照」よりは手軽ではない
例) 利用パッケージのデバッグが気軽に行えない
#ngtnet 23
NuGetについてより詳しく
実例に学ぶチーム開発におけるNuGet導入のすすめ
http://codezine.jp/article/corner/587
“NuGetを使うと多くのOSSライブラリを手軽に導入できるため、非常
に便利です。しかし、NuGetの真髄はライブラリの導入ではなく、
「パッケージ管理」にあります。本稿では、チーム開発における諸問
題を解決するために、NuGetがどのように使えるか、実例を元に紹介
していきます。”
#ngtnet 24
チーム成果物の集約
複数拠点で開発した成果物は最終的には
一つになる
一番最後だけでまとめようとすると
大変なことに…
ビルドできません!
足りません!
ルール無視しまくってます! etc...
#ngtnet 26
どうやってチェックするか
自動ビルドを活用する
すべての成果物を一からビルドする
コード分析ツールでチェックする
自動テストツールでテストする
ビルド成果物をテスト環境に配置する
#ngtnet 28
MSBuildの利用
MSBuild
https://msdn.microsoft.com/ja-jp/library/dd393574.aspx
“Microsoft Build Engine は、アプリケーションを
ビルドするためのプラットフォームです。”
#ngtnet 29
MSBuildの利用
.NETアプリケーションのビルドが、
Visual Studioがなくてもできる
ビルド以外の外部コマンドも実行できる
コード分析
自動テスト etc…
ビルド成果物のコピーや「発行」ができる
#ngtnet 30
どうやって定期的に行うか
Jenkins等のCIツール
Windowsのタスクスケジューラー
Team Foundation Server /
Visual Studio Online
#ngtnet 32
個人的おすすめ
MSBuildを使ってビルドを行う
batファイルを作成しておく
好みの定期実行ツールで実行する
必要なら手動で実行する
配布が必要ならテスト環境/本番環境など、
環境ごとにbatファイルを分ける
構成情報の切替をbatファイルで行う
#ngtnet 33
余談:自動テスト
VSについてくるMSTestが使える
.NET Frameworkには含まれないので注意
MSBuildではMSTestの実行ファイルを
外部コマンドとして実行する
#ngtnet 34
リフレクションの利用
DEMOhttps://github.com/masaru-b-cl/ngtnet-2015-10/tree/master/MEFSample/MEFSample.Reflection
#ngtnet 41
リフレクションの問題
管理項目が多い
アセンブリのファイル名、名前空間を含むクラス名、etc…
型安全でない
文字列での指定、ダウンキャスト、etc…
コードが煩雑
定形といえば定形だけど…
#ngtnet 42
MEFの利用
MEF
(Managed Extensibility Framework)
https://msdn.microsoft.com/ja-jp/library/dd460648.aspx
“Managed Extensibility Framework (MEF) は、
軽量で拡張可能なアプリケーションを作成するた
めのライブラリです。”
#ngtnet 43
MEFの利用
#ngtnet 44
root
plugins
Application.exe
Hoge.dll
Fuga.dll
コンテナーインポート
カタログ
エクスポート
エクスポート
機能名: Hoge
機能名: Fuga
MEFの利用
DEMOhttps://github.com/masaru-b-cl/ngtnet-2015-10/tree/master/MEFSample/MEFSample.Menu
#ngtnet 45
リモート呼び出し方法
三階層リッチクライアントアプリでは、
APサーバーに対するリモート呼び出しが必要
直接DBサーバーにアクセスしない
APサーバーが公開するAPIを利用して
データ取得や更新といった処理を実行
#ngtnet 48
.NETにおけるリモート呼び出し
.NET Remoting
TCP/IPなどを用いた比較的低レベルなデータやりとり
ASP.NET XML Webサービス
SOAPに基づいたHTTP(S)でのXMLデータやりとり
ASP.NET Web API
HTTP(S)でのJSON等のデータやりとり
WCF
通信プロトコル、データ形式などを選べるデータやりとり
#ngtnet 50
WCFの利用
WCF
(Windows Communication Foundation)
https://msdn.microsoft.com/ja-jp/library/ms731082.aspx
“Windows Communication Foundation (WCF) は、
サービス指向アプリケーションを構築するためのフ
レームワークです。”
#ngtnet 51
WCFの概要
#ngtnet 52
※WCF:WCFの概要図を作成してみました | be free
https://takanosho.wordpress.com/2012/03/06/wcf-image-diagram/ より
WCFの利点
VS統合のクライアントコード自動生成
VS上でサービスのエンドポイントを選んだ後、数ステップで可能
*.svcファイルとdllファイルを置くだけの簡単配置
Webサイトにサービス定義のsvcファイルとサービス実装コードを含む
dllファイルを配置するだけ
#ngtnet 53
WCFの利用
DEMOhttps://github.com/masaru-b-cl/ngtnet-2015-10/tree/master/WCFSample
#ngtnet 54
実プロジェクトでの運用
実プロジェクトではこれらの技術、ノウハウ
を組み合わせて開発プロセスを設計する
コーディングガイドライン
成果物のやり取りルール
テンプレートの作成
サンプルの作成 etc…
#ngtnet 56
実プロジェクトでの運用
間違えにくいように設計する
想定した手順は簡単に
想定外の手順は難しく
間違っても簡単にやり直せるように
言うは易し、行うは難し
開発の中でプロセスも成長させていく
#ngtnet 57
まとめ
.NETやVSに付属している各種の
標準テクノロジー群は便利
必要ならさらにOSSなどの導入を
実際に大事なのは
どう組み合わせて設計するか
対象アプリに合わせたフレームワーク設計、
開発プロセス運用を
#ngtnet 59
業務アプリケーション開発
を支える.NET技術
2015/10/10 - #ngtnet
TAKANO Sho(高野 将)/ @masaru_b_cl
ありがとうございました!#ngtnet 60
top related