スライド 1

Similar documents
Seasar.NET入門

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

Prog2_12th

テスト 1/7 ページ プレポスト Visual Studio による Windows アプリの開発 ( 基礎編 ) 受講日程受講番号氏名 1.NET Framework に関する記述で 誤っているものを選びなさい 1..NET Framework に含まれる CLR は プログラミング言語に依存し

Microsoft Word - Android_SQLite講座_画面800×1280

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

データアダプタ概要

デザインパターン第一章「生成《

プログラミング基礎I(再)

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

データベースアクセス

アナリシスパターン勉強会 責任関係事例紹介 株式会社オーエスケイ小井土亨 (CBOP COM 分科会主査 ) 2000/07/19 1

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

S2DaoでもN:Nできます

プレポスト【問題】

Microsoft Word - Writing Windows Installer's DLL.doc

目次 はじめに... 3 システムの必要条件... 4 ライセンス認証... 4 アクティベーション... 6 開発... 7 手順 1. アプリケーションの作成... 7 手順 2. データソースの作成と代入... 7 手順 3. テンプレートの作成 手順 4. レポートビューアの追加

Create!Form V11 - Excel 出力設定

ER/Studio Data Architect 2016 の新機能

rcp-add-01:アーキテクチャ設計書

PowerPoint プレゼンテーション

Prog2_9th

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

intra-mart Accel Platform

V8.1新規機能紹介記事

TALON Tips < カレンダー ( 月別 ) の画面を表示する > 株式会社 HOIPOI 第 1.1 版 p. 1

VB.NET解説

PowerPoint プレゼンテーション

WebReportCafe

C#の基本

1. アンケート集計サンプルについて ここでは Windows Azure と SQL Azure を使ってアンケートを実施し アンケート結果を Excel で集計するサンプルについて説明します アンケートは Windows Azure で運用し アンケート結果は SQL Azure に格納されます

Microsoft PowerPoint - chap10_OOP.ppt

Dolteng Scaffoldに対する機能追加とマスタ-ディテールScaffoldの紹介

目次 はじめに... 3 システムの必要条件... 3 サンプルアプリケーションの作成... 3 手順 手順 手順 手順 手順 手順 終わりに... 23

MxLogonサーバサイドツールキット用UI

10th Developer Camp - B5

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

(Microsoft PowerPoint - Java\221\3462\225\224\211\357\224\255\225\\\216\221\227\ ppt)

今さら人には聞けないAOP入門

スライド 1

intra-mart im-JavaEE Framework

Microsoft PowerPoint - FormsUpgrade_Tune.ppt

立ち読みページ

MISAO with WPF

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

WebOTXマニュアル

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

Microsoft Word - tutorial3-dbreverse.docx

— intra-mart Accel Platform セットアップガイド (WebSphere編)   第7版  

Microsoft Word - ModelAnalys操作マニュアル_

Base によるアプリケーション開発とサポート 鎌滝雅久 /OpenOffice.org 日本ユーザー会 OSC2007 Hokkaido 2007 年 6 月 30 日土曜日 10:55-11:40 北海道大学学術交流会館第 4 会議室

XNA Framework

変更履歴 版数変更日変更内容 /11/1 初版設定 /9/1 名称変更

生存確認調査ツール

Microsoft PowerPoint - Tutorial_6.ppt

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

第1章 ビジュアルプログラミング入門

ことばを覚える

intra-mart Accel Platform

Create!Form V11 - 機能リファレンス - テスト実行

GUIプログラムⅡ

Microsoft Word - VB.doc

S2Pradoの紹介

はじめに 本マニュアルには らくらく電子納品 のデータ ( 写真 アルバム 図書管理 出来形管理 ) を 現場編集 長 CALSMASTER( 以下 CALSMASTER) に移行する手順についてまとめられています なお この手順書ではらくらく電子納品がインストールされているパソコンに CALSMA

Microsoft Word - 206MSAccess2010


LightSwitch で申請システム Windows ストアアプリで受付システムを構築してみた 情報政策グループ技術職員金森浩治 1. はじめに総合情報基盤センターでは 仮想サーバホスティングサービスや ソフトウェアライセンス貸与といった さまざまなエンドユーザ向けサービスを行っている 上記のよう

PowerPoint Presentation

目次 1. HLA Fusion 3.0 がインストール可能な環境 HLA Fusion 3.0 のインストール HLA Fusion 3.4 のインストール 初期設定用データベース接続 ( 初めての方のみ ) 既存データベースのUpg

スクールCOBOL2002

編集する ファイルを開く マイクロデータの設定を行うファイルまたはファイルを開きます 開かれたファイルは編集画面に表示されて ブラウザ表示した時のプレビューも同時に表示されます HTML ファイルの選択 編集する ファイルを開くためにメインメニューから ファイル 開く を選びます ファイル選択ダイア

SharpShooter Reports.WPF 基本的な使い方 Last modified on: November 15, 2012 本ドキュメント内のスクリーンショットは英語表記ですが SharpShooter Reports JP( 日本語版 ) では日本語で表示されます

VBコンバータ利用方法

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

試作ツールは MIT ライセンスによって提供いたします その他 内包された オープンソース ソフトウェアについてはそれぞれのライセンスに従ってご利用ください

モデリング操作ガイド (データベースモデリング編)

目次 1. ログイン 報告 ユーザ 病院 使用場所 通知先 材料データベース... 7 ご注意ください...12 JAN コードから材料データを返します マネージャーの情報変更 報告 CS

Prog2_15th

1. 報告依頼業務 報告書集計システムを利用して 本部の報告依頼者が 売上実績見通しを各支社から収集し 報告書を作成します 依頼側の業務 1

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

Microsoft Word - RefWorksコース doc

<4D F736F F D20837D836A B5F93C192E88C AC888D593FC97CD5F2E646F63>

mySQLの利用

生活歯援プログラム ( 標準的な成人歯科健診プログラム 保健指導マニュアル ) 活用事業実施の手引き 平成 25 年 1 月 平成 27 年 6 月改訂 日本歯科医師会

Access のようなデータベースはないの? 答えは あります OOo は下記の なんちゃって Access の機能を持っています テーブルの作成とデータ操作が可能 クエリでデータの抽出 関連付けが可能 入力フロントエンドになるフォームの作成が可能 宛名ラベル レポートなどの印刷機能 データソース画

ご存知ですか? データ転送

更新履歴 No 更新箇所版数日付 1 第一版作成 /12/28 2 一部画像差し替え 誤字修正 /02/09 2

Microsoft PowerPoint - prog03.ppt

3/7 マイグレーション開発方針 顧客名 0 作成者 根岸正 < プログラム移行方針 > システム名称 A-VX システムマイグレーション作成日 2015/09/01 < COBOL 資産のプログラム移行 > COBOLソース ( メインとCOPYLIB) を入力としてSCC 言語変換ツールにてVB

インテル(R) Visual Fortran コンパイラ 10.0

プラグイン

2 / 26 平成 26 年 4 月 11 日 ( 金 ) 午後 1 時 9 分 Visual C Express の使用法 ( 東海大学理学部物理学科 ) 無償で利用できる開発環境 (Windows XP 以降 ) Visual Studio 2010 Express

スライド 1

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

厚生労働省版ストレスチェック実施プログラムバージョンアップマニュアル (Ver2.2 から Ver.3.2) 目次 1. プログラム概要 バージョンアップ実施手順 要注意 zip ファイル解凍の準備 Windows によって PC が保護されました と

Cuoreテンプレート

1. 画面拡大ショートカット ショートカットキーで作業効率 UP [Ctrl]+[+]: 拡大 [Ctrl]+[-]: 縮小 [Ctrl]+ 0 : デフォルトに戻す (100%) オンライン製品ヘルプ 2

PowerPoint プレゼンテーション

Transcription:

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

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

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

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

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

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> 画面処理用ユーティリティクラス 6

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

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

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

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

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

実装はステートレスにする Presntation 層以外の各レイヤー ( 層 ) の実装クラスはステートレス つまり状態を持たないようにします public class HogeServiceImpl : IHogeService { private Hoge _state; private int _arg1; // プロパティ dao は省略 } 入力条件をプロパティから引数で渡すようにして 結果を戻り値で取得するようにします public void GetData() { _state = _dao.getdata( _arg1 ); } public class HogeServiceImpl : IHogeService { // ただし dao は状態ではなく DI する } public Hoge GetData(int arg1) { return ( _dao.getdata( arg1 ) ); } 状態を持たないようにして 生成や呼び出しの順序などの依存性を低くします 1 2

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

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

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

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

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

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

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

アプリケーションの起動 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> 2 0

画面遷移 画面遷移は 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> 2 1

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

Ⅲ. サンプルの説明 2 3

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

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

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

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

画面の遷移 画面の遷移は次のようになります cd ユーザーインターフェイス ShowMasterList ShowMasterEdit 画面遷移コントロール用インターフェイス FrmDepartmentList FrmDepartmentEdit FrmMainMenu <<interface>> IFormDispatcher + ShowDataList() : DialogResult + ShowDataEdit(Nullable<int>) : DialogResult + ShowMasterList() : DialogResult + ShowMasterEdit(Nullable<int>) : DialogResult ShowDataList ShowDataEdit FrmEmployeeList FrmEmployeeEdit 2 8

.dicon ファイル Ex.dicon (DB 接続設定 ) Provider やデータソース設定など Examples.dicon ( フォーム用 ) 起動フォームの設定 画面遷移のインターフェイスの設定 次のようにフォームを登録します ExampleLogic.dicon を include しています <component name= FrmMain" class= Seasar.WindowsExample.Forms.FrmMainMenu" /> <component class= Seasar.WindowsExample.Forms.FrmDepartmentEdit /> <component class= Seasar.WindowsExample.Forms.FrmEmployeeList /> ExampleLogic.dicon (service 層 Domain 層用 ) <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> </component> 2 9

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

インターフェイスとその実装クラスです Service 層クラス図 cd Service.Impl <<interface>> Service::IBaseService BaseServiceImpl 基底のインターフェイス 基底の実装クラス <<interface>> Service::IDepartmentListService <<interface>> Service::IDepartmentEditService <<interface>> Service::IEmployeeEditService <<interface>> Service::IEmployeeListService DepartmentListServiceImpl DepartmentEditServiceImpl EmployeeEditServiceImpl EmployeeListServiceImpl 3 1

Domain 層クラス図 S2DAO.NET 用インターフェイスと CSV 出力用クラス cd Dao.Impl S2Dao.NET 用インターフェイス <<interface>> Dao::IGenderDao <<interface>> Dao::IEmployeeCSVDao <<interface>> Dao::IOutputCSVDao <<interface>> Dao::IEmployeeDao OutputCSVDaoImpl <<interface>> Dao::IDepartmentDao 3 2

例 : 社員データを登録するシーケンス図 sd 社員を登録する相互作用 ユーザ FrmEmployeeEdit <<interface>> IEmployeeEditService <<interface>> IEmployeeDao <<table>> T_EMP 社員データを入力する 登録ボタンを押す 入力データをセットする ExecUpdate( 入力社員データ ) alt 社員入力データ. 社員 ID [ == null] InsertData( 社員入力データ ) : 挿入件数 INSERT INTO ~ [!= null] GetData( 社員 ID) : 社員データ SELECT ~ alt 社員データ [!= null] UpdateData( 社員入力データ ) : 更新件数 UPDATE ~ [== null] InsertData( 社員入力データ ) : 挿入件数 INSERT ~ 登録件数 完了メッセージ 簡単に表示するために正確な UML ではありません 3 3

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

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

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