特集
|
|
|
●EntLibとUnityの統合による新しいオブジェクト生成アーキテクチャ
従来のEntLibでは、各Application Blockのオブジェクト(例えばDatabaseやCacheManager)を生成する場合は、ファクトリ・クラスを使っていた。
確かにファクトリ・クラスを使用することで、オブジェクトの生成を隠ぺいできるが、各Application Blockごとに固有のファクトリ・クラスを用意する必要があり、これらファクトリ・クラスの使用方法や実装などが統一されていなかった。しかし今回追加されたUnityを使用することで、統一された方法でオブジェクトを生成できるようになったのである。
|
以下にCaching Application Block(以下CachingAB)を使用する場合を例にしたサンプル・プログラムを示す。
|
|
CachingABを使用する場合のサンプル・プログラム | |
以下のアセンブリを参照に追加する Microsoft.Practices.Unity.dll Microsoft.Practices.EnterpriseLibrary.Caching.dll Microsoft.Practices.EnterpriseLibrary.Common.dll |
ここではジェネリック・メソッドであるAddNewExtensionメソッドにExtensionクラスの派生クラスであるEnterpriseLibraryCoreExtensionクラスやCachingBlockExtensionクラスを設定している。このExtensionクラスというのは、先に述べたUnityのオブジェクト生成パイプラインにカスタムの処理を追加させるための拡張機能であり、EntLib 4.0はこの拡張機能を利用しているのである。
CachingBlockExtensionクラスはCachingAB用のExtensionクラスだが、各Application Blockにはそれぞれ固有のExtensionクラスが用意されている。なお、EnterpriseLibraryCoreExtensionクラスは、すべてのApplication Blockで共通して使用するExtensionクラスであり、必ず追加する必要があるので覚えておいてほしい。
●EntLib提供オブジェクトの注入
次にカスタム・クラスにログ出力オブジェクトを注入する方法について解説する。
|
まずConfigurationコンソールを使ってLogging Application Blockの各設定を行う。ここではイベント・ログに出力する設定にしておく。
次に以下のサンプル・プログラムを実行するとイベント・ログにメッセージが出力される。ログ出力オブジェクトが注入されるカスタム・クラスとしてCustomObjectクラスを記述している。
|
|
LogWriterオブジェクトを注入するサンプル・プログラム | |
以下のアセンブリを参照に追加する Microsoft.Practices.Unity.dll Microsoft.Practices.EnterpriseLibrary.Logging.dll Microsoft.Practices.EnterpriseLibrary.Common.dll |
このサンプル・プログラムを実行すると、カスタム・クラスであるCustomObjectクラスのコンストラクタのlogWriterパラメータに、Configurationコンソールで設定されたLogWriterオブジェクト(ここではイベント・ログへ出力するためのオブジェクト)が渡されるのである。
このようにEntLib 4.0が提供する各Application Blockのオブジェクトを外部から注入できるため、アプリケーション・アーキテクチャを柔軟に設計・実装できるのである。
最後にEntLib 4.0が提供するExtensionクラスの一覧を下の表に示す。
Application Block | Extensionクラス名 |
CachingAB | CachingBlockExtension |
Data AccessAB | DataAccessBlockExtension |
LoggingAB | LoggingBlockExtension |
CryptographyAB | CryptographyBlockExtension |
SecurityAB | SecurityBlockExtension |
Excepition HandlingAB | ExceptionHandlingBlockExtension |
- | EnterpriseLibraryBlockExtension |
- | EnterpriseLibraryCoreExtension |
EntLib 4.0が提供しているカスタムExtensionクラス一覧 | |
・Application BlockはABと略称 ・EnterpriseLibraryBlockExtensionは各Extensionクラスの基底クラス |
■
本稿ではEntLib 4.0の概要について解説を行った。
実は、2008年3月にリリースされたEntLib 4.0 CTP版ではUnityは一切組み込まれていなかった。しかもUnityは2008年4月中旬になってようやくリリースされたのだが、EntLib 4.0はUnityの正規リリース後、わずか半月ほどでUnityを統合したEntLib 4.0がリリースされている。本稿で説明したとおり、UnityはEntLib 4.0の中核に位置しており、コードの修正は少なからずあったものと推察されるが、これほどまでの短期間でリリースできたのはEntLib開発チームがテスト駆動、イテレーションなどのアジャイル開発を実践し、大きな変更でも柔軟かつ迅速に対応できる体制を一貫して敷いているからにほかならない。
このようにpatterns & practicesチームは開発自体も常に先進的かつ挑戦的であり、こういった姿勢がEntLibにも良い効果をもたらしているのだろう。
INDEX | ||
特集:Enterprise Library 4.0概説 | ||
新しいオブジェクト生成機構でEntLibはこう変わる! | ||
1.EntLib 3.0とEntLib 4.0の相違点 | ||
2.Unity Application Block(1) | ||
3.Unity Application Block(2) | ||
「Enterprise Library 4.0概説」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|