第 4 回 プロジェクトテンプレートを作ってみよう (前編)
こんにちは!
これまでの回では、Open 棟梁の「テンプレートベース」をそのまま使用して、動作をご覧いただいてきました。 今回は、そのテンプレートベースをカスタマイズして、独自のプロジェクトテンプレートを作っていきます!
第 1 回でもご紹介いたしましたが、Open 棟梁の「プロジェクトテンプレート」とは、システム開発プロジェクトで使用する共通的な開発基盤 (テンプレート) です。 Open 棟梁を使う上で、とても大事なものですので、前編と後編の 2 回に分けてご紹介いたします。
システム開発プロジェクトの基本項目を決める
まず、そのシステム開発プロジェクトの基本項目を決めましょう。 具体的には、以下の項目を決めていきます。
- Visual Studio のプロジェクト名
- 開発言語
- システム形態
- C/S
- Web
- ASP.NET Web フォーム
- ASP.NET Web MVC
- オンプレミスか、クラウド (Microsoft Azure PaaS) か
- その他
- 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 のシーケンスと同じですが、ポストバックがないところ、画面の終了処理があるのが特徴です。具体的な、共通処理の追加手順は以下のとおりです。
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]を実行し、ビルドが通ることを確認しておきましょう。
ちょっと長くなってきましたので、今回はここまでです。次回は、今回の続きで、独自のプロジェクトテンプレートを作る方法の後半です。
お楽しみに!