S2Container.NET, S2Dao.NET コミッタ 藤井 宏明

Slides:



Advertisements
Similar presentations
データベースの基礎知識 ACEESS の基本操作. データベースの基礎知識 データベース  特定のテーマや目的に毎のデータの集合体 データベースソフトウェア  データベースを作成、管理するソフトウェアの総 称 Oracle(Oracle) IBM(DB2) Microsoft(SQL Server)
Advertisements

ASP 入門2 ー授業でアンケート集計ー. ねらい 総合実習等で、相互評価を行った際の集計を ASP + AccessDB で行う。 相互評価の点数部分は見られないように、感 想部分(テキスト)は見えるようにする。 ( 発表直後のフィードバック ) AccessDB に蓄積した得点は、 Excel.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
Windows HPC Server を使ってみる
DB(データベース)のおはなし 作成者:小野正広 DBと言っても、  ドラゴンボール ではないですぞ! 3/1/2017.
WagbyR6.5 Update 14 PPT版 更新情報
Visual Studio 2005による XML Web サービス入門
コントロールパネル ◎コントロール パネル: コンピュータのさまざまな機能を設定するための画面
Win32APIとMFC H107102 古田雅基 H107048 佐藤一樹 H107126 山下洋平.
データマイニングのための柔軟なデータ取得、操作を支援するAPIの設計
コントロールパネル ◎コントロール パネル: コンピュータのさまざまな機能を設定するための画面
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
コンポーネントの再利用に必要な情報 えムナウ (児玉宏之)
Microsoft Office 2010 クイックガイド ~Access編~
ACCESSによる データベースアプリケーション開発実習 日本工業大学 情報工学科 “データベースの実際” 教材
Accessによるデータベース(3) Ver /11.
WagbyR6.5 Update 12 PPT版 更新情報
Solid Edge Customization with VB   (Fundamentals)
     年  月  日 名前 太郎 1 班.
CHAPTER1 UMLとオブジェクト指向の基本概念(2)
Visual Studio LightSwitchの概要
MSBuild 色々出来るよ 2011/04/02 お だ.
JavaBeans とJSP データベース論 第5回.
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
UML入門 UML PRESS vol.1 より 時松誠治 2003年5月19日.
SAP & SQL Server テクニカルアーキテクチャ概要 マイクロソフト株式会社 SAP/Microsoft コンピテンスセンター
マイクロソフト Access を使ってみよう 第1回
データベース設計 第9回 Webインタフェースの作成(1)
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
プログラミング演習3 第2回 GUIの復習.
2003年度 データベース論 安藤 友晴.
概要 Boxed Economy Simulation Platform(BESP)とその基本構造 BESPの設計・実装におけるポイント!
プロジェクト演習Ⅱ インタラクティブゲーム制作 イントロダクション2
Microsoft Visual Studio 2005 の使い方
第1回.リレーショナルデータベースを使ってみよう
Visual Studio 2005による スマート クライアント入門
MVP for VB が語る C# 入門 初音 玲.
MVP for VB が語る C# 入門 初音 玲.
Windows Azure (CTP) 触ってみた
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
Windows PowerShell Cmdlet
2006年度 東京サテライト校 エンタープライズ・アプリケーション II
単語登録(1) ◎MS-IMEの「単語登録」に、単語、語句、記号など自分がよく使うものを登録しておくと、便利である。
     年  月  日 名前 太郎 1 班.
     年  月  日 名前 太郎 x 班.
Javaによる Webアプリケーション入門 第2回
ミドルウェア”TSUNAGI”を 用いたWEBアプリケーションの構築
COM コンポーネント・オブジェクト・モデル.
Windows Azure (CTP) 触ってみた
インタラクティブ・ゲーム制作 プログラミングコース 補足資料
Javaによる Webアプリケーション入門 第11回
物理的側面を表現する図 Chapter6 物理的側面を表現する図について徐研究室の大楠が発表します。 FM13005 大楠拓也 徐研究室.
アプリケーション依存の先読みが可能なO/Rマッピングツール
高度プログラミング演習 (01).
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向プログラミング クラス 継承
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
C#プログラミング実習 第3回.
Javaによる Webアプリケーション入門 第4回
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
Jakarta Struts (1) ソフトウェア特論 第10回.
JSPの基本 J2EE I (データベース論) 第8回 /
vc-1. Visual Studio C++ の基本操作 (Visual Studio C++ の実用知識を学ぶシリーズ)
プログラム分散化のための アスペクト指向言語
クラスの追加 メソッドの追加 TestCaseの追加 Test Methodの追加.
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
Microsoft Office Project Server 2007
地理情報コンテンツ・データベースコンテンツ新規作成
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
System.AddInを利用したアプリケーション拡張 - アドインの開発 -
Presentation transcript:

S2Container.NET, S2Dao.NET コミッタ 藤井 宏明 WindowsForm サンプル解説 S2Container.NET, S2Dao.NET コミッタ 藤井 宏明

S2Container.NETのExamplesフォルダに 付属するWindowsSampleの解説です。 概要 S2Container.NETのExamplesフォルダに 付属するWindowsSampleの解説です。 アプリケーション・アーキテクチャー ソリューション構成 プロジェクト概要 サンプル説明

Ⅰ.アプリケーション・アーキテクチャー

このサンプルにおけるアプリケーション構造は、次のような特徴をしています。 アプリケーション・アーキテクチャー このサンプルにおけるアプリケーション構造は、次のような特徴をしています。 レイヤー・アプローチ 各画面の目的に応じた柔軟なアプローチ方法をベースにしたクラス設計 当然、DIコンテナ(=S2Container.NET)を 使っています。

この層間をData Transfer Object(DTO)を使ってアクセスし、直接アクセスを禁止します。 レイヤーアプローチ レイヤーは次のものを用意しています。 この層間をData Transfer Object(DTO)を使ってアクセスし、直接アクセスを禁止します。 Presentation層 Service層 Domain層 Presentation層 Service層 Domain層 RDBMS DTO DTO

主として、WindowsFormで構成される層です。 Presentation層 主として、WindowsFormで構成される層です。 Formクラスと画面遷移インターフェイス Formクラスもdiconファイルに含めて、DIコンテナ管理にします。 Programクラス(起動用) S2Containerを初期化しています。これ自身はDIコンテナ管理外です。 Seasar.Windows.S2ApplicationContextを使用して、アプリケーションコンテクストによる起動にしています。 Seasar.Windows.S2ApplicationContextはdiconファイルで起動フォームを指定します。 画面処理用ユーティリティクラス <component name=“AppContext" class="Seasar.Windows.S2ApplicationContext"> <arg>container</arg> <property name=“MainForm”>”FrmMenu"</property> </component>

DAOやロジックをコントロールする層です。 Service層 DAOやロジックをコントロールする層です。 次のインターフェイス・実装クラスは、diconファイルに含めて、DIコンテナで管理します。 IBaseServiceインターフェイス Service層のインターフェイスの基底インターフェイス BaseServiceImplクラス IBaseServiceの実装クラス Service層インターフェイス IBaseServiceを継承する Service層インターフェイスの実装クラス BaseServiceImplを継承する

画面のイベント = サービスの提供するメソッド Service層のメソッド設計 画面で提供するサービスが何か?を考えます。 本当は概念モデルよりサービスを考えていくのかも しれませんが、簡単に設計するためにそうは考えません。 画面一つに対応するサービスのインターフェイスを一つ用意します。 画面で発生するイベントに対応したメソッドをサービスに用意します。 画面のコントロール初期化用の各画面共通メソッドはIBaseServiceに用意します。 作成したサービスのインターフェイスはIBaseServiceを継承します。 画面のイベント = サービスの提供するメソッド

サービスが必要とするDomainへアクセスする層です。 S2Dao.NETのインターフェイスやSQLファイル S2Dao.NETで使用するインターフェイスやsqlファイル Domain層のインターフェイス 必要とあれば、作成します。 Domain層インターフェイスの実装クラス

リソースアクセスの種類 = DAOの提供するメソッド Domain層のメソッド設計 サービスが必要としているリソースが何か?を 考えます。 リソース・アクセスを提供するData Access Object(DAO)を 作ります。 リソース(例えば、DBのテーブルや帳票)に1:1にDAOを用意します。 アクセスする種類がメソッドになります。 リソースアクセスの種類 = DAOの提供するメソッド

Service層とDomain層の間にある、DAOの組み合わせを再利用する層です。 Logic層 Service層とDomain層の間にある、DAOの組み合わせを再利用する層です。 Logic層のインターフェイス DAOインターフェイスの組み合わせパターンを規定するインターフェイス Logic層インターフェイスの実装クラス DAOのインターフェイスの組み合わせを定義する実装クラス

DTO (Data Transfer Object) 層間のデータのやり取りをするためのクラス PONO(Plain Old .NET Object)クラス 普通のプライベート・フィールドとそのプロパティで構成されるクラス S2Dao.NET用のクラス

Ⅱ.Visual Studio ソリューション構成

一つのソリューションは次のプロジェクトを保持します。 ソリューションの構成 一つのソリューションは次のプロジェクトを保持します。 Formsプロジェクト →Exe WindowsFormを含んでおり、起動用構成になっている。 Presentation層に相当します。 ビルドイベントで、Testsプロジェクトの.diconファイルをコピーします。 Logicsプロジェクト →DLL Service層、Domain層、DTOを含んでいます。 Testsプロジェクト →DLL ユニットテスト用クラスと.diconファイルなど設定ファイルを含んでいます。

プログラム、クラス、インターフェイス、リソースを所在を区別するために設定します。 名前空間 プログラム、クラス、インターフェイス、リソースを所在を区別するために設定します。 名前空間を次のように設定します。 (会社名).(製品名).(サービス名) 基本的には、MSの指針に従います。 (サービス名)には、Forms, Logics, Tests, Utilsなどが入ります。

画面と画面処理用クラスを含んだメインプロジェクト Formsプロジェクト 画面と画面処理用クラスを含んだメインプロジェクト WindowsFormクラス Programsクラス アプリケーション起動用のクラス。 プロジェクトの起動用に設定されています。 IFormDispatcherインターフェイス 画面遷移用。 メソッドで画面遷移をコントロールします。 /// <summary> /// 一覧フォームを表示する /// </summary> /// <returns>ダイアログ結果</returns> [TargetForm(typeof (FrmEmployeeList), ModalType.Modal)] DialogResult ShowFlowA(); App.Config設定ファイル。ロードするDLLを設定します。 Testsの.diconファイルを、ビルドイベントでコピーします。

Service層やDomain層などを構成するプロジェクト Logicsプロジェクト Service層やDomain層などを構成するプロジェクト インターフェイスだけで構成します。 実装クラスはその下のImplフォルダに配置します。 Serviceフォルダ Service層インターフェイスを格納 Daoフォルダ Domain層インターフェイスを格納 S2Dao.NET用SQL文ファイルも一緒に格納 Logicsフォルダ Logics層インターフェイスを格納 Dtoフォルダ DTO用のPONOクラスを格納

ユニットテスト用クラスと.diconファイルを格納する プロジェクト Testsプロジェクト ユニットテスト用クラスと.diconファイルを格納する プロジェクト ユニットテストにはS2Unit.NETを使用します。 S2Container.NET用設定ファイルに三種類使用する。 Ex.dicon →DB接続用のファイル。 Example.dicon →DIするFormを含んだファイル。 ExampleLogic.dicon →Logics.Implのクラスを含んだファイル。 (S2Unit.NETではこちらを使用) App.Config ロードするDLLを記述。 VS2003では自動的にコピーしてくれないので、ビルド後イベントでコピーします。(フォルダ無い場合のためにイベントで作成します)

Programsクラス(.NET1.1ではStartMain)を使って実行します。 アプリケーションの起動 Programsクラス(.NET1.1ではStartMain)を使って実行します。 このクラスは名前空間とdiconファイル名を変更して、そのまま使います。 サンプルのExamples.diconの中で次のように設定しています。 <components> <component name="AppContext" class="Seasar.Windows.S2ApplicationContext" > <arg>container</arg> <!-- MainFormを初期起動フォームに変更する --> <property name="MainForm">FrmMainMenu</property> </component> <component name="FrmMainMenu" class=“Seasar.WindowsExample.Forms.FrmMainMenu" /> </components>

画面遷移はIFormDispatcherインターフェイスを使ってコントロールし、フォームにDIする。 public interface IFormDispatcher { /// <summary> /// フローAのフォームを表示する /// </summary> /// <returns>ダイアログ結果</returns> [TargetForm(typeof (FrmEmployeeList), ModalType.Modal)] DialogResult ShowFlowA(); } <component name="FormInterceptorr" class="Seasar.Windows.AOP.Interceptors.FormInterceptor" /> <component name="Dispatcher" class=“Seasar.WindowsExample.Forms.IFormDispatcher"> <!-- pointcutは命名規則に従ってつけたメソッド名を正規表現で表示する --> <aspect pointcut="Show.*"> <component class="Seasar.Windows.AOP.Interceptors.FormInterceptor" /> </aspect> </component>

WindowsFormを作るうえでの注意点 コンストラクタで画面の初期化をしない。FormのLoadイベントメソッドで行います。 基本的にDIコンテナがFormを管理し、Singltonなオブジェクトのため。 画面に値を渡すときや戻り値は、プロパティを作り、同名の引数をIFormDispatcher(画面遷移インターフェイス)の呼び出し メソッドに持たせます。 Service層のインターフェイスのフィールドとそのプロパティをFormに作成すれば、DIコンテナがオブジェクトを自動的に セットしてくれる。

Ⅲ.サンプルの説明

T_EMP(従業員テーブル) サンプルで使用するテーブル1 カラム名 論理名 型 N_ID 社員ID オートナンバー S_CODE 社員コード テキスト型 S_NAME 社員名 N_GENDER 性別ID 数値型 D_ENTRY 入社日 日付/時刻型 N_DEPT_ID 部門ID

T_DEPT(部門テーブル) サンプルで使用するテーブル2 カラム名 論理名 型 N_ID 部門ID オートナンバー S_CODE 部門コード テキスト型 S_NAME 部門名 N_SHOW_ORDER 表示順番 数値型

T_GENDER(性別テーブル) サンプルで使用するテーブル3 カラム名 論理名 型 N_ID 性別ID オートナンバー S_NAME 性別名 テキスト型

S2WindowsExampleプロジェクト メニュー、社員、部門管理を含んだメインプロジェクト 画面(Frm~)クラス すべてExample.diconでS2Containerに登録されています。 Example.diconで、FrmMainMenuを起動クラスに設定しています。 Programsクラス アプリケーション起動用のクラスで、定数でdiconファイルを指定しています。 プロジェクトの起動用に設定されています。 二重起動を防止しています。 IFormDispatcherインターフェイス 画面遷移コントロール用。 その他 App.Config設定ファイル。ロードするDLLを設定します。 Testsの.diconファイルとMDBファイルを、ビルドイベントでコピーしてます。

画面の遷移 画面の遷移は次のようになります。

.diconファイル Ex.dicon (DB接続設定) Examples.dicon (フォーム用) Providerやデータソース設定など Examples.dicon (フォーム用) 起動フォームの設定、画面遷移のインターフェイスの設定、次のようにフォームを登録します。ExampleLogic.diconをincludeしています。 ExampleLogic.dicon (service層、Domain層用) <component name=“FrmMain" class=“Seasar.WindowsExample.Forms.FrmMainMenu" /> <component class=“Seasar.WindowsExample.Forms.FrmDepartmentEdit”/> <component class=“Seasar.WindowsExample.Forms.FrmEmployeeList” /> <component name=“departmentDao" class=“Seasar.WindowsExample.Logics.Dao.IDepartmentDao"> <aspect >Ex.DaoInterceptor</aspect> </component> <component class="Seasar.Windows.Logics.Service.Impl.DepartmentEditServiceImpl" > <aspect pointcut=“ExecUpdate”>Ex.LocalRequiredTx</aspect>

S2WindowsExamples.Logicsプロジェクト Service層やDomain層などを構成するプロジェクト Serviceフォルダ 基底サービス …部門一覧、性別一覧を取得する。 部門一覧、部門修正、社員一覧、社員修正サービス …一覧を取得する、更新する、削除する、   CSVで出力する。 Implフォルダに実装クラスを配置 Daoフォルダ S2Dao.NET用インターフェイスとSQL文ファイル CSV出力用インターフェイス Implフォルダに出力用DAO実装クラスを配置 Dtoフォルダ S2Dao.NET用クラスに社員、部門、性別クラス CSV出力用クラス

Service層クラス図 インターフェイスとその実装クラスです

Domain層クラス図 S2DAO.NET用インターフェイスとCSV出力用クラス

例:社員データを登録するシーケンス図 簡単に表示するために正確なUMLではありません。

S2WindowsExample.Testsプロジェクト ユニットテスト用クラスとdiconファイルを格納するプロジェクト テストクラスはS2Unit.NETを使うように作成 .diconファイルは三種類作成し、ビルド後イベントでコピー Ex.dicon →DB接続用のファイル。 Example.dicon →DIするフォームを含んだファイル。 ExampleLogic.dicon →Logics.Implのクラスを含んだファイル。 (S2Unit.NETではこちらを使用) データベース Access MDBを使用し、ビルド後イベントでコピーしています。 App.Config VS2003では自動的にコピーしてくれないので、ビルド後イベントで設定

Seasar.WindowsExample 名前空間 Seasar.WindowsExample Formsプロジェクト。 Seasar.WindowsExample.Forms Logicsプロジェクト Seasar.WindowsExample.Logics Testsプロジェクト Seasar.WindowsExample.Test サンプルを再利用するときには既定の名前空間とフォルダ名、アセンブリ名を変更してください。

S2Container.NETのページ S2Dao.NETのページ S2Windows.NETのページ おわり http://s2container.net.seasar.org/ S2Dao.NETのページ http://s2dao.net.seasar.org/ S2Windows.NETのページ http://s2container.net.seasar.org/ja/s2windows.html