「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>クラス構造]] *目次 [#l74a6582] #contents *概要 [#fa1e3b66] 各レイヤについて説明します。 #ref(fx_image_s.png,left,nowrap,各レイヤ) 各レイヤの構成方法については、「[[モジュール構成]]」を参照。 *引数・戻り値クラス [#v18f3866] [[B層>#kda3e339]]の呼び出しに必要な引数、戻り値。 #ref(ParamAndReturn.png,left,nowrap,引数、戻り値クラスのクラス構造) *P層 [#o229cb29] 画面処理を実装するレイヤ。「[[画面の構成]]」も参考にできる。 -単項目のチェック処理を除く業務処理はB層 -データアクセス処理はD層に実装する。 #ref(Presentation.png,left,nowrap,P層クラスのクラス構造) **画面デザイン [#bd397b73] -ASP.NETの場合Page -Windows Formsの場合Form、 -WPFの場合Window / Page を使用して、個別デザインを実装する。 **デザイン ベース [#qe6113be] またOpen棟梁では「デザイン ベース」中の~ コントロールのイベント処理を「個別デザイン」で~ オーバーライドして処理を変更できる。 ***マスタページ [#u7846190] ASP.NETの場合、マスタページを使用して、枠のデザイン・処理の共通化を図る。 ***ベースFormクラス [#a8cca4cc] Windows Formsの場合、ベースFormクラスを使用して、枠のデザイン・処理の共通化を図る。 **コントロール [#n7f3429a] ***ユーザ コントロール [#f5cab22c] ASP.NET Web Forms、Windows Forms、WPFなどで~ 複数のコントロールを集約しパーツ化して、デザイン・処理の共通化を図ることができる。 またOpen棟梁では~ 「ユーザ コントロール」中のコントロールのイベント処理を~ [[「個別デザイン」でオーバーライドして処理を変更できる>ボタンレイアウトの共通化]]。 ***カスタム コントロール [#d9583d9a] ASP.NET Web Forms、Windows Forms、WPFの~ 標準のコントロールを継承し、動作をカスタマイズできる。 ***HTMLヘルパー [#o0ea9e4d] ※ASP.NET MVCで使用 従来のASP.NET Web Formsでは、コントロールを使用して、ラベルやテキストボックスなどのコントロールを表示していたが、~ ASP.NET MVCでは、コントロールは使用できない。その代わりに、ASP.NET MVCでは HTMLヘルパーを使用する。 **コード・ビハインド [#mab2f1f4] -ページのデザインとプログラム コードを分離して記述する、~ コード ビハインド モデルにおける、プログラム実装側のモジュール。 -なお、デザインは、前述の --「[[画面デザイン>#bd397b73]]」 --「[[デザイン ベース>#qe6113be]]」 --「[[コントロール>#n7f3429a]]」 >に実装する。 **[[コード・ビハインド>#mab2f1f4]]の構造 [#s19f8cdc] ***画面コード親クラス1 [#j60074a5] [[ベースクラス1]]相当 ***画面コード親クラス2 [#g96b7cf4] [[ベースクラス2]]相当 ***画面コード クラス [#m5b680ac] 派生の末端。 *B層 [#kda3e339] 業務処理を実装するレイヤ。 -画面処理はP層 -データアクセス処理はD層に実装する。 #ref(Business.png,left,nowrap,B層クラスのクラス構造) **トランザクション [#j969ead8] ***トランザクション ルート(Tx-Root) [#x6e0a757] トランザクション ルートとなるB層 -トランザクション ルートなのでB層からネストして呼び出すことはできない。 -コネクション管理処理にて生成した[[データ アクセス制御クラス(Dam)>#s38b7c07]]を保持する。 -ファサード パターンで、処理を集約する(3層C/S方式でも1イベント、1リクエストに集約しトラフィックを軽減) ***共通処理 [#db913772] 処理の共通化を行うためのクラス -トランザクション ルートでないのでB層からネストして呼び出すことができる。 -コネクション管理処理にて生成した[[データ アクセス制御クラス(Dam)>#s38b7c07]]を、別途持ち回る必要がある。 **Tx-Rootの構造 [#bebcaef2] ***業務コード親クラス1 [#o7312e84] [[ベースクラス1]]相当 ***業務コード親クラス2 [#sc1ea1e7] [[ベースクラス2]]相当 ***業務コード クラス [#hebeea91] 派生の末端。 *D層 [#x5a04b9f] データ アクセス処理を実装するレイヤ。 -画面処理はP層 -業務処理はB層に実装する。 #ref(DataAccess.png,left,nowrap,B層クラスのクラス構造) **データ アクセス オブジェクト(Dao) [#o009664d] -データ アクセスのためのオブジェクト -コンストラクタから[[データ アクセス制御クラス(Dam)>#s38b7c07]]を渡す必要がある。 ***自作 Dao [#k5f9a0e9] 任意の複数のSQLの実行、テーブルへのアクセスを実装できる。 ***汎用 Dao [#fa1bb49d] -汎用Daoは呼び出し元が指定したSQLを処理可能。 -主に「参照系」の処理を実行する際に利用する。 ***自動生成 Dao [#e057cc96] -自動生成Daoは1つのテーブルへのCRUD処理が可能。 -主に「更新系」の処理を実行する際に利用する。 ***Dao集約層 [#ad3600ab] [[汎用Dao、自動生成Daoを集約し、論理的なデータ アクセスを構成するD層追加レイヤ。>モジュール構成#ld4383a0]] **[[Dao>#o009664d]]の構造 [#y7e814a3] ***データアクセス親クラス1 [#u023f4af] [[ベースクラス1]]相当 ***データアクセス親クラス2 [#i0867c1e] [[ベースクラス2]]相当 ***データアクセス クラス [#b452922a] 派生の末端。 **データ アクセス制御クラス(Dam) [#s38b7c07] ***概要 [#b910b559] [[動的パラメタライズド・クエリ]]など、各種D層機能を実装するデータ プロバイダのラッパークラス。 -業務処理で複数の接続が必要な場合は、前述のコネクション管理処理において複数のDamを生成・保持する必要がある。 -また、複数のDBMS(データプロバイダ)に対応させる場合は、~ コネクション管理処理にてDBMS(データプロバイダ)毎に用意された指定の型でDamを生成・保持し、~ 以降の処理ではDamをベースの型で扱うようにしてDBMS(データプロバイダ)固有型(機能)の使用を局所化する必要がある。 ***種類 [#v366357e] -同梱Dam --DamSqlSvr~ System.Data.SqlClient用 System.Data.SqlClient用(SQLServer) --DamOLEDB~ System.Data.OleDb用 System.Data.OleDb用(OLEDB) --DamODBC~ System.Data.Odbc用 System.Data.Odbc用(ODBC) -NuGet有り(OSS) --DamMySQL~ MySql.Data.MySqlClient用 MySql.Data.MySqlClient用(MySQL) --DamPstGrS~ Npgsql用 Npgsql用(PostgreSQL) --DamManagedOdp~ Oracle.ManagedDataAccess.Client用 Oracle.ManagedDataAccess.Client用(Oracle) -Legacy --DamDB2~ DB2用 --DamHiRDB~ HiRDB用 --DamOraOdp~ Oracle.DataAccess.Client用 Oracle.DataAccess.Client用(Oracle) -Discon --DamOraClient~ System.Data.OracleClient用 System.Data.OracleClient用(Oracle) -その他 --DamSqlDbWithMultiShard IP:202.246.252.97 TIME:"2018-12-20 (木) 10:54:42" REFERER:"https://opentouryo.osscons.jp/index.php?cmd=edit&page=%E3%83%AC%E3%82%A4%E3%83%A4%E3%81%AE%E8%AA%AC%E6%98%8E" USER_AGENT:"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"