Seasar.NET入門

Similar documents
スライド 1

早分かりS2Dao

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

intra-mart im-JavaEE Framework

V8.1新規機能紹介記事

S2DaoでもN:Nできます

Prog2_12th

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

PowerPoint プレゼンテーション

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

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

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

JPA & Kuina-Dao入門

intra-mart WebPlatform/AppFramework

Microsoft PowerPoint - chap10_OOP.ppt

パフォーマンス徹底比較 Seasar2 vs Spring 2006/04/12 株式会社電通国際情報サービスひがやすを株式会社アークシステム本間宏崇 Copyright the Seasar Foundation and the others all rights reserved.

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

プレポスト【問題】

PowerPoint プレゼンテーション

10th Developer Camp - B5

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

WebOTXマニュアル

intra-mart WebPlatform/AppFramework

Microsoft認定資格問題集(70-483_demo)

Microsoft PowerPoint ppt

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

5-1- 応開発フレームワークに関する知識 開発フレームワークを利用した Web アプリケーションの実装方法を理 Ⅰ. 概要解する MVC や OR マッピング DIxAOP といった技術を理解する Ⅱ. 対象専門分野職種共通 Ⅲ. 受講対象者 本カリキュラムの 5-1- 基開発フレームワークに関す

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

S2Dao入門

JavaプログラミングⅠ

GEC-Java

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

データアダプタ概要

PowerPoint プレゼンテーション

S2Pradoの紹介

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

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

Microsoft PowerPoint - Seasar2.5.ppt

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

C#の基本

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

MVP for VB が語る C# 入門

intra-mart Accel Platform

Microsoft PowerPoint - sc2007spring_Aa1_Kuina.ppt

Microsoft PowerPoint - prog03.ppt

5-3- 応統合開発環境に関する知識 1 独立行政法人情報処理推進機構

tkk0408nari

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

Prog1_6th

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

T2でつなごう! -つなぐつながるWebフレームワーク「T2」の紹介

S2BaseとZend Framework

Prog2_15th

Javaの作成の前に

ICONファイルフォーマット

PowerPoint Presentation

スライド 1

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

メディプロ1 Javaプログラミング補足資料.ppt

PowerPoint プレゼンテーション

基礎計算機演習 実習課題No6

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

(Microsoft Word - \225\361\215\220\217\221_\215K.doc)

スライド 1

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

WPF アプリケーションの 多言語切替

データベースアクセス

PowerPoint プレゼンテーション

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

Javaプログラムの実行手順

.NET Framework 4.0 世代の Expression Trees

Prog1_15th

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ

Oracle ADF 11g入門

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

PowerPoint Presentation

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

第2回講義

HTTP 404 への対処

Caché SQL ゲートウェイの使用法

C#の基本2 ~プログラムの制御構造~

基本情報STEP UP演習Java対策

スライド 1

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

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)...

スライド 1

GEC-Java

Oracle JDeveloper 10g ADF Creation Date: Jul 07, 2004 Last Update: Jul 08, 2004 Version 1.0

mySQLの利用

intra-mart Accel Platform

Java言語 第1回

intra-mart Accel Platform — 招待機能プログラミングガイド   初版  

Microsoft PowerPoint - JavaFesta.ppt

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

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

いまさら人には聞けない DI×AOP入門

開発・運用時のガイド JDK8への移行に伴う留意点 [UNIX]

Prog2_10th

Microsoft PowerPoint - グリッド協議会GT4演習資料_2007_配布用

PowerPoint Presentation

Transcription:

2007 Spring Seasar.NET 入門 2007.5.27 Seasar.NET 杉本和也 2007 Spring Copyright 2004-2007 The Seasar Foundation and the others. All rights reserved. 1

杉本和也と申します 高知県の株式会社アイビスに勤務しています プログラミング歴 6 年 オープンソース歴 2 年 自己紹介 Seasar.NET のリーダ S2Container.NETのコミッタ S2Dao.NETのリーダ 2

アジェンダ Seasar.NETについて S2Container.NETの使い方 S2Dao.NETの使い方 業務ロジックのためのDI まとめ 3

Seasar.NET について Seasar.NET について S2Container.NET の使い方 S2Dao.NET の使い方 業務ロジックのための DI まとめ 4

Seasar.NET とは Seasar プロジェクトで.NET Framework に関するプロダクトを扱うプロジェクト Seasar.NET プロジェクトに参加するには Sandbox プロジェクトにプロジェクト ( プロダクト ) を申請する その後 Sandbox 卒業したら Seasar.NET のプロダクトに 既存の Seasar.NET プロダクトのコミッタになる 希望者は連絡ください 5

Seasar.NET の目的 品質の高いソフトウェアを効率良く開発する為のプロダクトを開発 提供する 6

Seasar.NET の今 S2Container.NET 1.2.9 AOP をサポートした DI コンテナ S2Dao.NET 1.0.4 O/R マッピングフレームワーク 7

S2Container.NET の使い方 Seasar.NET について S2Container.NET の使い方 S2Dao.NET の使い方 業務ロジックのための DI まとめ 8

AOP をサポートした DI コンテナ S2Container.NET 3つのキーワード コンテナ DI AOP 9

コンポーネントを格納する クラスやインターフェース コンポーネントのインスタンスを管理する S2Container.NET コンテナについて コンポーネント コンテナ 下さい! コンポーネント DI コンテナを利用するプログラム コンポーネント どうぞ! 10

S2Container.NET コンテナのインスタンス管理 コンポーネントのインスタンスを管理する コンテナから利用側に どうぞ! するときにインスタンス化するかインスタンス化されたものを返す インスタンス化の種類 ( コンポーネントに設定できる ) singleton 1 度インスタンス化したら常に同じインスタンスを返す prototype 要求がある度に新しくインスタンス化したものを返す request(asp.net 連携時 ) 同じ request 内であれば同じインスタンスを返す session( ASP.NET 連携時 ) 同じ session 内であれば同じインスタンスを返す outer コンテナではインスタンスは管理しない 11

DI (Dependency Injection) S2Container.NET Dependency Injection について 直訳すると依存注入 コンポーネントが別のコンポーネントを必要としていればセットしてくれる ( 具体的にはクラスのフィールドに ) コンポーネント コンテナ 依存注入 下さい! コンポーネント 依存注入 コンポーネント どうぞ! DI コンテナを利用するプログラム 12

DI (Dependency Injection) の種類 S2Container.NET DI の種類 プロパティ インジェクション プロパティを使用し DI を行う コンストラクタ インジェクション コンストラクタを使用して DI を行う メソッド インジェクション メソッドを使用して DI を行う 自動バインディングを利用すると簡単 13

S2Container.NET 使い方 S2Container.NET のコンテナを S2 コンテナと呼ぶ 1. コンポーネントをS2コンテナに格納する 2. S2コンテナからコンポーネントを受け取る 3. コンポーネントを使う 14

S2Container.NET コンポーネントの格納 定義ファイル (dicon ファイル ) S2 コンテナファクトリ -S2ContainerFactory -SingletonS2ContainerFactory 1. dicon ファイルにコンポーネントの定義を記述する 2. S2 コンテナファクトリに dicon ファイルをセットする 3. S2 コンテナファクトリから S2 コンテナを作成する S2 コンテナ 15

S2Container.NET dicon ファイル Logic.dicon( 埋め込まれたりソース ) <components> <component name= employeelogic class= EmployeeLogic /> <component class= DepartmentLogic /> </components> 16

// 部署ロジックインターフェース public interface IDepartmentLogic { } // 部署ロジック実装クラス public class DepartmentLogic : IDepartmentLogic { } S2Container.NET コンポーネントのサンプル // 社員ロジックインターフェース public interface IEmployeeLogic { } // 社員ロジック実装クラス public class EmployeeLogic : IEmployeeLogic { private IDepartmentLogic departmentlogic; public IDepartmentLogic DepartmentLogic { set { departmentlogic = value; } } } 17

S2Container.NET コンポーネントを取得して使う // S2コンテナファクトリに定義ファイルをセットする SingletonS2ContainerFactory.ConfigPath = Logic.dicon ; // S2コンテナファクトリを初期化する SingletonS2ContainerFactory.Init(); // S2コンテナファクトリからS2コンテナを作成する IS2Container container = SingletonS2ContainerFactory.Container; // S2コンテナからコンポーネントを取得する IEmployeeLogic logic = (IEmployeeLogic) container.getcomponent( employeelogic ); この logic には DepartmentLogic がセットされている 18

Web アプリケーション (ASP.NET) 実際の使われ方 S2HttpModule が用意されており そこで S2 コンテナを扱う Windows アプリケーション等 スタートアップ部分で 自分で S2 コンテナを扱う必要あり 19

AOP (Aspect Oriented Programming) AOP アスペクト指向プログラミング 本来の処理とは異なる処理をプログラムのソースコードに書かずに後から織り込みましょう! というプログラミング ロギングやトランザクション処理等に使用される S2Dao.NETのようなフレームワークを作成できる インターフェースに AOP で実装を追加する 20

S2Container.NET AOP を使わない場合 // 足し算を行うメソッド int Plus(int x, int y) { int result = x + y; return result; } ログを出力するプログラムを埋め込む // 足し算を行うメソッド ( ログ出力機能付き ) int Plus(int x, int y) { Console.WriteLine( 引数 : + x +, + y); int result = x + y; Console.WriteLine( 結果 : + result); return result; } 21

AOP を利用しない場合 S2Container.NET AOP コードの可動性が低下する ロギングのような処理を追加したり取り除いたりする際にバグが混入する可能性がある S2Container.NET の AOP の機能を利用して後から織り込もう! 22

S2Container.NET AOP の設定 <components> <component name= traceinterceptor class= Seasar.Framework.Aop.Interfaces.TraceInt erceptor /> <component class= CulcLogic > <aspect>traceinterceptor</aspect> </component> </components> 23

S2Dao.NET の使い方 Seasar.NET について S2Container.NET の使い方 S2Dao.NET の使い方 業務ロジックのための DI まとめ 24

S2Dao.NET O/R マッピングフレームワーク S2Dao.NET は O/R マッピングフレームワーク マッピング情報は XML に記述しない データベースへの SQL 発行とオブジェクトへのマッピングを強力にサポート データの取得 データの更新 Entity クラス Entity クラス Daoインターフェース Daoインターフェース テーブル テーブル 25

S2Dao.NET 利用手順 1. テーブルに対応したEntityクラスを作る 2. Entityクラスに対応したDaoインターフェースを作る 3. 必要に応じてDaoインターフェースにメソッドを追加する 4. DiconファイルにDaoを登録する 5. DaoをロジッククラスにDIして使う 26

基本的にテーブルと 1 対 1 で作成する 基本 テーブル名と同じ名前のクラス名にする 基本 カラム名と同じ名前のプロパティ名にする S2Dao.NET Entity クラス public class Employee { private int empid; private int empcode; private string empname; public int EmpID { set { empid = value; } get { return empid; } } 27

S2Dao.NET Entity クラスに指定できる属性 クラスに指定できる属性 Table 属性 ( テーブル名とクラス名が異なる場合に指定 ) NoPersistentProps 属性 ( カラムとマッピングしないプロパティを指定 ) VersionNo 属性, Timestamp 属性 ( 排他制御を行うプロパティを指定 ) プロパティに指定できる属性 Column 属性 ( カラム名とプロパティ名が異なる場合に指定 ) Relno 属性, Relkeys 属性 ( 別テーブルとの結合を指定 ) ID 属性 (ID の自動生成を指定 ) 28

S2Dao.NET Dao インターフェース Entity クラスと 1 対 1 でインターフェースを作成する IEmployeeDao 発行する SQL と 1 対 1 でメソッドを追加する 更新系メソッド ( メソッド名が下記で始まる ) Insert 処理 (Insert, Add, Create) Update 処理 (Update, Modify, Store) Delete 処理 (Delete, Remove) 検索系メソッド 更新系メソッド以外で戻り値の型を指定する 29

更新系メソッド SQL を自動生成させる場合 引数は Entity クラス SQLファイルや属性を使ってSQLをカスタマイズ 戻り値の型はSystem.Int32かvoid System.Int32 であれば更新行数が戻り値 検索系メソッド 戻り値の型が Entity クラスであれば 1 件分を取得 S2Dao.NET Dao のメソッドルール 戻り値の型がEntityクラスの配列, IList, IList<Entityクラス > であれば複数件を取得 戻り値の型が上記以外であれば 1カラムの値を取得 引数名からWHERE 句を自動生成 30

S2Dao.NET Dao インターフェースサンプル [Bean(typeof(Employee))] public interface IEmployeeDao { int InsertEmp(Employee emp); [Sql("delete from Employee where EmpCode=/*empCode*/")] void DeleteByEmpCode(int empcode); Employee GetByEmpCode(int empcode); [Query("order by EmpCode asc")] Employee[] GetAllEmployees(); } [Sql("select EmpName from Employee where EmpID=/*empID*/")] string GetEmpNameByEmpID(int empid); 31

S2Dao.NET Dao インターフェースに指定できる属性 インターフェースに指定 Bean 属性 (Entity クラスを指定する ) メソッドに指定 Query 属性 (Where 句以降を指定 ) Sql 属性 (SQL をまるごと指定 ) NoPersistentProps 属性 ( 自動生成 Update 文で更新しないプロパティを指定する ) PersistentProps 属性 ( 自動生成 Update 文で更新するプロパティを指定する ) 32

S2Dao.NET SQL ファイル SQLをまるごと指定できる (SQL 属性と同じ ) Daoインターフェースと同じ名前空間に配置 ビルドアクションプロパティを 埋め込まれたリソース に設定 ファイル名は インターフェース名 _ メソッド名.sql IEmployeeDao_GetEmpNameByEmpID.sql select EmpName from Employee where EmpID=/*empID*/3 /*empid*/ はバインド変数コメント バインド変数コメントの後ろにテスト用のダミーデータ SQL 発行ツールでSQLを実行するとEmpID=3という値でテストが実行できる 33

S2Dao.NET 設定 <!-- データプロバイダや DB 接続文字列の設定はドキュメント参照 --> <!-- S2Dao.NET の DaoInterceptor とそれに必要なコンポーネント --> <component class="seasar.extension.ado.impl.basicdatareaderfactory" /> <component class="seasar.extension.ado.impl.basiccommandfactory" /> <component class="seasar.dao.impl.daometadatafactoryimpl" /> <component name="daointerceptor" class="seasar.dao.interceptors.s2daointerceptor"/> <!-- 社員 Dao --> <component class="iemployeedao"> <aspect>daointerceptor</aspect> </component> 34

業務ロジックのための DI Seasar.NET について S2Container.NET の使い方 S2Dao.NET の使い方 業務ロジックのための DI まとめ 35

Quill 業務ロジックのための DI ステートレスな業務ロジックの為の簡易 DI 機能 Quill 簡単 DI 機能 VSのツールボックスからFormにペタッと貼り付けるとDIが有効になる FormのフィールドにDIすべきものがあればDIする インターフェースの属性で実装クラスを指定する 属性で実装クラスが指定されていれば DI すべきとみなす AOPは属性で指定する S2コンテナと連携してS2コンテナのコンポーネントも扱える 36

制限された機能 DI のタイプはフィールド インジェクションのみ Quill 制限された機能 扱うクラスには引数なしのコンストラクタが必要 インスタンスは管理しない (singleton のみ ) 1つのインターフェースに1つの実装クラスしか指定できない 簡単 DIで小規模な開発でもDIの利用をしやすく Quillのソースコード量を最小限に保ち利用者が容易に確認できるようにする 37

Quill デモ 1 インタフェースを作る (Implementation 属性で実装クラスを指定する ) [Implementation(typeof(CulcLogic)] Public interface ICulcLogic { int Plus(int x, int y); } 2 実装クラスを作る (Aspect 属性でログ出力の Aspect を適用する ) Public class CulcLogic : ICulcLogic { [Aspect(typeof(ConsoleWriteInterceptor))] public int Plus(int x, int y) { Console.WriteLine( Plus が呼ばれた ); return x + y; } } 38

Quill デモ 3 Form を作る (ICulcLogic 型のフィールドを用意して使ってみる ) Public partial class Form1 : Form { private ICulcLogic culclogic = null; private void button1_click(object sender, EventArgs s) { int ret = culclogic.plus(1, 2); Console.WriteLine( 戻り値 : + ret); } } 4 デザイナから QuillControl を Form に貼り付ける 羽のアイコンはデフォルトで非表示なのでデザイナ上ではとりあえずじゃまにならないところに張っておく 39

Quill デモ 5 実行してボタンを押すとログが出力される (DI と AOP が動いたことがわかる ) これだけで簡単 DI+AOP! コンソールに出力されたログ Start:Seasar.Quill.Examples.CulcLogic#Plus // (Interceptor によるログ ) Plus が呼ばれた End :Seasar.Quill.Examples.CulcLogic#Plus // (Interceptor によるログ ) 戻り値 :3 40

まとめ Seasar.NET について S2Container.NET の使い方 S2Dao.NET の使い方 業務ロジックのための DI まとめ 41

まとめ S2Container.NET 実装クラスに依存せずインターフェース経由でやりとりを行える 変更 テスト 分業が行いやすい S2Dao.NET マッピング情報を XML に持たないので簡単に扱えることができ 劇的に生産性が向上する マッピングミスや ADO.NET の API の扱いのバグが無くなり品質が向上する Quill 42

S2Container.NET http://s2container.net.seasar.org/ S2Dao.NET http://s2dao.net.seasar.org/ ご静聴ありがとうございました sugimotokazuya の日記 http://d.hatena.ne.jp/sugimotokazuya/ 43