.NET 開発基盤部会 Blog

.NET 開発基盤部会 Blog >> 記事詳細

2016/08/10

Open 棟梁の使い方(基礎編)第4回

Tweet ThisSend to Facebook | by:nishino

第 4 回 プロジェクトテンプレートを作ってみよう (前編)

こんにちは!

これまでの回では、Open 棟梁の「テンプレートベース」をそのまま使用して、動作をご覧いただいてきました。 今回は、そのテンプレートベースをカスタマイズして、独自のプロジェクトテンプレートを作っていきます!

第 1 回でもご紹介いたしましたが、Open 棟梁の「プロジェクトテンプレート」とは、システム開発プロジェクトで使用する共通的な開発基盤 (テンプレート) です。 Open 棟梁を使う上で、とても大事なものですので、前編と後編の 2 回に分けてご紹介いたします。

システム開発プロジェクトの基本項目を決める

まず、そのシステム開発プロジェクトの基本項目を決めましょう。 具体的には、以下の項目を決めていきます。

  • Visual Studio のプロジェクト名
  • 開発言語
    • C#
    • VB
  • システム形態
    • C/S
      • Windows フォーム
      • WPF
    • Web
      • ASP.NET Web フォーム
      • ASP.NET Web MVC
      • オンプレミスか、クラウド (Microsoft Azure PaaS) か
    • その他
      • Windows ストアアプリ
  • DBMS
    • SQL Server, Oracle, IBM DB2, MySQL, PostgreSQL, etc.

Visual Studio のプロジェクト名に合わせて、テンプレートベースをカスタマイズする

テンプレートベースに含まれるサンプルアプリケーションには、サンプル用のプロジェクト名がつけられています。 たとえば、ASP.NET Web アプリケーションのサンプルプロジェクトには、「ProjectX_sample」と名付けられています。 ファイル名、フォルダ名、名前空間名にも、同じ名前がつけられています。 さすがに、この名前でお客様に納品するプロジェクトを作るわけにはいきませんよね。 なので、これを、実際のシステム開発プロジェクトの名前に修正しましょう。

具体的には、以下の名前を修正します。

  • Visual Studio のソリューション名、プロジェクト名
  • プログラムの名前空間名
  • フォルダ名
  • ソリューションファイル名 (*.sln) やプロジェクトファイル名 (*.csproj / *.vbproj)

さすがに、これらを一つ一つ手で修正していくのは骨が折れる作業ですよね。 なので、これらの名前の修正は、一括置換ツールを使うのが便利です。 ファイル名、フォルダ名の一括置換には、「Flexible Renamer」などのツールが便利です。 テキストに含まれるプロジェクト名、名前空間名の一括置換には、「GrepReplace」などのツールが便利です。 たとえば、これらのツールを使って、「ProjectX_sample」を「GyomuApp」に置換してみましょう。 (各ツールの使い方の詳細については、それぞれのツールのサイトにお任せしたいと思います。 もちろん、ご紹介したツール以外で使い慣れた一括置換ツールがあれば、そちらをお使いいただいても構いません。)

  • Flexible Renamer でファイル名・フォルダ名を一括置換する。
  • GrepReplace でファイル内部の文字列を一括置換する。

プロジェクトで共通的に実行させたいロジックを追加する

ここで、Open 棟梁のクラス構成をおさらいしておきましょう。

ベースクラス1処理のフロー制御や例外処理、データベースのコネクション管理やトランザクション管理などを行うフレームワークの心臓部分。基本的にはそのまま (手を加えず) 使用する。
ベースクラス2ベースクラス1を継承する。
そのシステムで共通的な処理 (ログ出力など) を行う。システム開発プロジェクトごとにカスタマイズ可能。
サブクラスベースクラス2を継承する。
業務固有の処理を行う。

このように、データベースのコネクションやトランザクションの管理、ログ出力、例外処理などの共通的な処理をベースクラス1,2に実装することで、開発者はサブクラスへの業務固有の処理の実装に専念できます。 もしこれらのほかに、共通処理を実装する必要がある場合は、「ベースクラス2」をカスタマイズすることで実現できます。 例えば、機能の権限チェック (実行可否) や、「いつ、誰が、どの DB にアクセスしたか」の監査ログの出力などが挙げられます。 それでは、P 層(画面)、F 層(業務ロジック)、D 層(データアクセス)に分けて、それぞれ共通処理を追加する方法をご紹介します。

ここがポイント!
プロジェクトで共通的に実行したい処理を追加するには、ベースクラス2をカスタマイズする。 ベースクラス1へは手を加えない。

P 層(画面)フレームワークへの共通処理の追加

P 層(画面)フレームワークに共通処理を追加する方法をご紹介します。

ASP.NET アプリケーションの場合

ASP.NET アプリケーションの P 層(画面)フレームワークに、共通処理を追加する方法をご紹介します。以下の図は、Open 棟梁の P 層フレームワークのシーケンス図です。

このように、ベースクラス2の各メソッドをカスタマイズすることで、それぞれの箇所で共通的な処理を行わせることができます。たとえば、ベースクラス2の UOC_PreAction メソッドに、Cookie や入力値などのチェックロジックを追加すると、すべてのイベントハンドラで共通的に、値チェックを行わせることができるようになります。また、フロー制御を行うベースクラス1はカスタマイズ不可とすることで、全体的なフローを壊すことなく、共通処理を追加できます。具体的な、共通処理の追加手順は以下のとおりです。
  • C:\root\programs\C#\Frameworks\Infrastructure\AllComponent.sln を開いてください。
  • Business プロジェクトの、[Presentation]-[MyBaseController.cs]を開いてください。
  • 共通処理を実行させるタイミングに応じて、以下に示すメソッドに処理を追加してください。
    実行タイミング処理を追加するメソッド名
    画面初期ロード時MyBaseController.UOC_CMNFormInit
    ポストバック時MyBaseController.UOC_CMNFormInit_PostBack
    イベントハンドラ実行前MyBaseController.UOC_PreAction
    イベントハンドラ実行後(正常時)MyBaseController.UOC_AfterAction
    例外発生時MyBaseController.UOC_ABEND
    各イベントの最後MyBaseController.UOC_Finally

Windows フォームアプリケーションの場合

Windows フォームアプリケーションの P 層(画面)フレームワークに、共通処理を追加する方法をご紹介します。以下の図は、Open 棟梁の P 層フレームワークのシーケンス図です。

ほぼ、ASP.NET のシーケンスと同じですが、ポストバックがないところ、画面の終了処理があるのが特徴です。具体的な、共通処理の追加手順は以下のとおりです。
  • C:\root\programs\C#\Frameworks\Infrastructure\RichClientComponent.sln を開いてください。
  • Business.RichClient プロジェクトの、[Presentation]-[MyBaseControllerWin.cs]を開いてください。
  • 共通処理を実行させるタイミングに応じて、以下に示すメソッドに処理を追加してください。
    実行タイミング処理を追加するメソッド名
    フォームロード時MyBaseControllerWin.UOC_CMNFormInit
    フォームを閉じた時MyBaseControllerWin.UOC_CMNFormEnd*
    イベントハンドラ実行前MyBaseControllerWin.UOC_PreAction
    イベントハンドラ実行後(正常時)MyBaseControllerWin.UOC_AfterAction
    例外発生時MyBaseControllerWin.UOC_ABEND
    各イベントの最後MyBaseControllerWin.UOC_Finally
    *FormClosed (フォームを閉じたときに発生するイベント) に対応しています。FormClosing (フォームを閉じようとしているときに発生するイベント) ではありませんので、ご注意ください。

F 層(業務ロジック)フレームワークへの共通処理の追加

F 層(業務ロジック)フレームワークに共通処理を追加する方法をご紹介します。以下の図は、Open 棟梁の F 層フレームワークのシーケンス図です。

F 層でも同様に、業務ロジックやトランザクションへの開始・終了処理を追加することができます。たとえば、UOC_PreAction メソッドに認証ロジックを追加すると、業務ロジックの実行前に認証チェックや権限チェックなどを行わせることができるようになります。具体的な手順は以下のとおりです。
  • C:\root\programs\C#\Frameworks\Infrastructure\AllComponent.sln を開いてください。
  • Business プロジェクトの、[Business]-[MyFcBaseLogic.cs]を開いてください。
  • 共通処理を実行させるタイミングに応じて、以下に示すメソッドに処理を追加してください。
    実行タイミング処理を追加するメソッド名
    DB 接続MyFcBaseLogic.UOC_ConnectionOpen
    業務ロジック実行前MyFcBaseLogic.UOC_PreAction
    業務ロジック実行後(正常時)MyFcBaseLogic.UOC_AfterAction
    トランザクション終了後(正常時)MyFcBaseLogic.UOC_AfterTransaction
    例外発生時MyFcBaseLogic.UOC_ABEND

D 層(データアクセス)フレームワークへの共通処理の追加

D 層(データアクセス)フレームワークに共通処理を追加する方法をご紹介します。以下の図は、Open 棟梁の D 層フレームワークのシーケンス図です。

D 層は、クエリの実行前後に処理を追加することができます。具体的な手順は以下のとおりです。
  • C:\root\programs\C#\Frameworks\Infrastructure\AllComponent.sln を開いてください。
  • Business プロジェクトの、[Dao]-[MyBaseDao.cs]を開いてください。
  • 共通処理を実行させるタイミングに応じて、以下に示すメソッドに処理を追加してください。
    実行タイミング処理を追加するメソッド名
    SQL 実行前MyBaseDao.UOC_PreQuery
    SQL 実行後MyBaseDao.UOC_PostQuery

フレームワークのビルド

ここまでで、P 層(画面)、F 層(業務ロジック)、D 層(データアクセス)のそれぞれのベースクラス2に、共通処理を追加できました。最後に、第 3 回でご紹介したビルドバッチファイルのうち、[3_Build_Framework.bat]を実行し、ビルドが通ることを確認しておきましょう。

ちょっと長くなってきましたので、今回はここまでです。次回は、今回の続きで、独自のプロジェクトテンプレートを作る方法の後半です。

お楽しみに!


11:07 | 投票する | 投票数(1) | コメント(0)