![]() |
特集.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の実践 | ||
ホワイトペーパー(TechTargetジャパン)
- 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本を一挙公開
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜Java編〜
| ◆ | 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台以上! グループ内 サーバの「統合管理」によるメリットは? |







