特集.NET開発者のためのDI&AOP入門(前編)Seasar.NETでDIを始めよう株式会社アイビス 杉本 和也2007/12/10 |
|
“DI”や“AOP”というキーワードを耳にしたことがあるだろうか。これらのテクノロジは、.NET技術者にはまだまだ普及していないのが現状だが、Java開発での長年の利用結果から見ても開発生産性を飛躍的に高めてくれるテクノロジであることは間違いなく、.NET開発でも必ず役立つものであり、むしろ使わない手はない。従って、できるだけ多くの.NET開発者にこれらのテクノロジの良さを知っていただき、有効に活用していただきたいと筆者は考えている。
そこで本稿では2回にわたり、前編でDIを、後編でAOPを紹介していきたいと思う。本稿を通して.NET開発におけるDIとAOPの有効性と可能性を感じ取っていただければ幸いである。
■1. DIとAOPを理解するためのサンプルの作成
DI(Dependency Injection。依存注入)とAOP(Aspect-Oriented Programming。アスペクト指向プログラミング)の意味については、取りあえずここでは、次のように理解しておいてほしい。
- DIとは:依存性を持つオブジェクトを外部から注入するパターンのこと。
- DIコンテナとは: DIを実現するフレームワークのこと。
- AOPとは:オブジェクト指向ではうまくメソッド化できない、オブジェクト間に共通する処理を抽出して、1カ所にまとめるプログラミング手法のこと。
これらの概念は、なかなか言葉だけでは理解しづらいところがあるため、本稿ではDI&AOP用のフレームワークを実際に用いながら、DIとAOPを解説していく。
本稿で使用するフレームワークは、“Seasar.NETプロジェクト”というオープンソース・プロジェクトで開発されているものだ。
●1-1. Seasar.NETプロジェクトで提供されているフレームワーク
Seasar.NETプロジェクトでは次の2つのフレームワークが開発・提供されている。
- S2Container.NET(AOPをサポートしたDIコンテナ)
- S2Dao.NET(O/Rマッピング・フレームワーク)
このうち本稿ではS2Container.NETを用いてDIとAOPについて紹介していく。S2Dao.NETについては本稿では扱わないが(※このためO/Rマッピングについての説明は割愛)、こちらもとても有用なフレームワークなのでぜひS2Dao.NETのページを参照してもらいたい。
では、まずはS2Container.NETを開発環境に準備しよう。
●1-2. S2Container.NETの準備
S2Container.NETは「S2Container.NETのダウンロード・ページ」の[最新のリリース]欄のリンク(執筆時点では「S2Container.NET 1.3.5 」というリンク)からダウンロードできる。なお、2007年12月10日現在の最新バージョン1.3.5は.NET Framework 2.0に対応している。
S2Container.NETは.zipファイルで配布されているので、ダウンロードが完了したらさっそく(任意の場所に)解凍しよう。すると「S2Container.NETフォルダ」(本稿の例では「s2container.net-1.3.5」というフォルダ)が展開される。
以上でS2Container.NETの準備は完了だ。ここでついでに、展開されたS2Container.NETフォルダの内容物について、ひととおり紹介しておこう。
●1-3. S2Container.NETの構成内容
展開されたS2Container.NETフォルダ内の主なディレクトリ構成を下の表に記す。
ディレクトリ | 内容の説明 |
s2container.net\build\net2.0 | リリース・ビルドされた「S2Container.NETのアセンブリ」 |
s2container.net\data | Examples(サンプル)で使用されるデータベースを構築するための.sqlファイルなど |
s2container.net\lib\net2.0 | S2Container.NETが利用する、ほかのオープンソース・ソフトウェアのアセンブリなど |
s2container.net\source | S2Container.NETのソース・コード |
www | ドキュメント |
S2Container.NETフォルダのディレクトリ構成 | |
本稿の例では「C:\s2container.net-1.3.5\」ディレクトリの配下にこれらのディレクトリが存在する。 |
S2Container.NETは複数のアセンブリで構成されている。「s2container.net\build\net2.0」ディレクトリに含まれるアセンブリの一覧と説明を、参考までに下の表に記しておく。
アセンブリ | 説明 |
Seasar.dll | DIコンテナであるS2Containerを含むS2Container.NETの基本となる機能を持つアセンブリ |
Seasar.Dao.dll | O/Rマッピング・フレームワーク(S2Dao.NET)のアセンブリ |
Seasar.Dxo.dll | データ変換機能(S2Dxo.NET)のアセンブリ |
Seasar.DynamicProxy.dll | 型の拡張によりAOPを実現するためのアセンブリ |
Seasar.Quill.dll | DIコンテナであるQuillのアセンブリ(属性によるDIとAOPを行う) |
Seasar.Unit.dll | S2Containerを使用した単体テストを支援するテスティング・フレームワーク(S2Unit.NET)のアセンブリ |
Seasar.Windows.dll | Windowsアプリケーション支援機能(S2Windows.NET)のアセンブリ |
S2Container.NETのアセンブリ一覧 |
●1-4. S2Container.NETが提供する2つのDIコンテナ
上記の表からも分かるように、S2Container.NETには「S2Container」と「Quill」の2種類のDIコンテナが含まれている。それぞれの特徴を下の表にまとめた。本稿では、よりシンプルにDIとAOPを実現できるQuillを利用していく。
DIとAOPについての説明がまだなので、この表については、いまは軽く読み飛ばす程度で参照していただき、本稿を読み終わった後で振り返っていただくとより深く理解できるだろう。
S2Container | Quill | |
生い立ち | 従来のJavaから移植されたDIコンテナ | Seasar.NETオリジナルのDIコンテナ |
設定方法 | XML(Diconファイル) | 属性 |
機能 | Quillに比べると多機能 | ステートレスな業務ロジックを構築するための最小限の機能 |
インスタンス モード |
・singleton ・prototype ・request ・session ・outer |
・singleton |
DIの種類 |
・コンストラクタ・インジェクション ・プロパティ・インジェクション ・メソッド・インジェクション |
フィールド・インジェクション |
AOPの種類 |
・RealProxy(透過プロキシ) ・DynamicProxy(型の拡張) |
DynamicProxy(型の拡張) |
使い分け |
・JavaのSeasar2の利用経験があり同じように利用したい場合 ・細かくDIを制御したい場合 ・Diconファイルを置き換えることで実装を切り替えたい場合 |
シンプルなDIとAOPを利用したい場合(細かくDIを制御したい場合はQuillをカスタマイズするか、S2Containerと連携する必要がある) |
S2ContainerとQuillの特徴 |
それでは、さっそくS2Container.NET(Quill)を活用するプロジェクトを作成しよう。
INDEX | ||
[特集].NET開発者のためのDI&AOP入門 | ||
Seasar.NETでDIを始めよう | ||
1.DI&AOP開発環境の準備 | ||
2.DIとAOPを理解するためのサンプルの作成 | ||
3.ソース・コードで理解するDI | ||
4.DIが役立つ場面 | ||
コードで簡単に分かる“AOP” | ||
1.ソース・コードで理解するAOP | ||
2.AOPの実践 | ||
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|