【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 

特集

.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の実践

ホワイトペーパーTechTargetジャパン

Insider.NET フォーラム 新着記事
  • Chapter15:LINQとクエリ式 (2010/3/17)
     C# 3.0の目玉機能であるLINQについて、さまざまな記述例を交えながら徹底解説。書籍『[完全版]究極のC#プログラミング』より転載
  • VBラムダ式 基礎文法最速マスター (2010/3/16)
     今度はVB。ラムダ式の基礎文法を、短い説明と簡単なコードでまとめる。「ラムダ式、どう書くんだっけ?」という場合の簡易リファレンスとして活用できる
  • ASP.NET MVC 2がリリース (2010/3/15)
     ASP.NET MVC 2の正式版(VS 2008のASP.NET 3.5向け、VS 2010には標準で含まれる予定)のリリースについてのお知らせ
  • 逆引きリファレンス:コア編 (2010/3/12)
     jQueryのキモともいえる$()関数を始め、jQueryオブジェクトの中核となるメソッドについてまとめた、すぐに役立つ12本を一挙公開

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?