SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

S2Container.NETのDIとAOPを活用し生産性の高いシステムを構築する

.NET環境でDIコンテナとAOPの機能を提供するフレームワークを利用する


サンプルアプリケーションの概要

 それでは、s2dotnetを用いたアプリケーションのサンプルを見てみましょう。書籍マスタのメンテナンスを行うWindowsアプリケーションです。[デバッグ]メニューの[開始]にて画面が起動します。

書籍マスタのメンテナンス画面
書籍マスタのメンテナンス画面

 ローカルトランザクションを使用する「MDB版」と分散トランザクションを使用する「SQL ServerMSDE)」版の2種類を用意しています。

ローカルトランザクションを使用する「MDB版」について

 「S2dotnetSampleLocalTx.zip」をダウンロードしてください。特にセットアップ作業は不要です。そのまま実行してください。

分散トランザクション(MS-DTC)を使用する「SQL Server版」について

 「S2dotnetSampleMsDtcTx.zip」をダウンロードしてください。テーブルとデータを作成するため、「Resources」フォルダのSQLをあらかじめ実行しておいてください。「Dao」フォルダの「DtcTx.dicon.xml」ファイルの「ConnectionString」を読者の環境にあわせて変更してください。また、.NET Frameworkの自動トランザクション機能を使用しています。COM+サービスとMS-DTC環境を必要とするため、Windows2000、WindowsXP、Windows 2003 ServerのOSでのみ動作します。

開発手順

 アプリケーションの開発手順を簡単にまとめます。

  1. コンポーネントのインターフェースを定義する(プログラム)
  2. コンポーネントの実装クラスを記述する(プログラム)
  3. DIとAOPの設定を記述する(設定ファイル)
  4. s2dotnetからコンポーネントを取得し利用する(プログラム)

 s2dotnetで生成・管理するクラスは「コンポーネント」と呼ばれます。今回のサンプルのレイヤ構成とs2dotnetの役割について下図に整理します。

s2dotnetの役割
s2dotnetの役割

 インターフェースと実装の分離といっても、全てのオブジェクトの生成をs2dotnetで行わなければいけないわけではありません。一般的には、レイヤ間のオブジェクト生成にs2dotnetを使用します。今回のサンプルでは、プレゼンテーション層、ビジネスロジック層、データアクセス層とレイヤを分けていますので、それぞれの境界でインターフェースを定義しています。

 なお、従来の開発でインターフェースを定義する場合は、1つのインターフェースに対して、複数の実装を作成し、Factoryパターンなどで振り分けるケースもありましたが、DIコンテナを用いた開発ではインターフェースと実装クラスは1対1の関係になります。ポリモーフィズムのためのインターフェースというよりも、レイヤの外に対してサービスを明示的に定義するインターフェースの意味合いが強いといえます(例:プレゼンテーション層の開発者はビジネスロジック層の振る舞いを知っているだけで、ビジネスロジックがどのように実装されているかについては知らなくても良い)。

コンポーネントのインターフェースを定義する(プログラム)

 ビジネスロジック層の「AUTHOR(著者)」に関するコンポーネントを例にプログラムを見ていきます。

 まず、プレゼンテーション層に公開するIAuthorLogicインターフェースを定義します。ここでは、著者全員を取得するgetAuthorsAllメソッドと、著者を追加するaddAuthorメソッドを定義します。

「IAuthorLogic.cs」抜粋
public interface IAuthorLogic
{
  IList getAuthorsAll();
  void addAuthor(Author author);
}

コンポーネントの実装クラスを記述する(プログラム)

 IAuthorLogicをインターフェース継承してAuthorLogicImplを実装します。IAuthorLogicインターフェースで定義したgetAuthorsAllメソッドとaddAuthorメソッドを実装します。

「AuthorLogicImpl.cs」抜粋
public class AuthorLogicImpl:System.MarshalByRefObject,IAuthorLogic{
  //DIによって設定されるプロパティ
  private IAuthorDao _authorDao = null;
  public IAuthorDao AuthorDao
  {
    set { _authorDao = value; }
  }

  //著者取得(複数件)全員
  public IList getAuthorsAll()
  {
    return _authorDao.getAuthorsAll();
  }

  //著者追加
  public void addAuthor(Author author)
  {
    _authorDao.addAuthor(author);
  }
}

 プロパティのIAuthorDaoにはAuthorDaoImplが注入されているため、各メソッドからは_authorDaoの対応メソッドを呼び出すだけとなります。

次のページ
DIとAOPの設定を記述する(設定ファイル)

修正履歴

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 青木 淳夫(アオキ アツオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/180 2006/12/22 18:44

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー