特集

.NET開発者のためのDI&AOP入門(前編)

Seasar.NETでDIを始めよう

株式会社アイビス 杉本 和也
2007/12/10
Page1 Page2 Page3 Page4

 “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を用いて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の実践


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間