Q&A履歴を纏めました。
(1)次のような使い分けで認識合っていますでしょうか?
また、① は、ツールで自動生成なので手作成作業は無く、
② は、逆に全て手作成の認識ですが、こちらも合っていますでしょうか?
①自動生成D層
⇒ 基本4メソッド(テーブルの全カラムor指定のカラムに対するSELECT/INSERT/UPDATE/DELETE)
②動的パラメタイズド・クエリ
⇒ 基本4メソッド以外(JOINしたりUNIONしたり副問合せしたり・・・)
→ 合っています。
(2)手組のSQLファイルを自動生成D層と同じ方式でB層でD層に紐づけてDBアクセスさせる方式
手作成SQLのDBアクセス方式として、パラメタライズドクエリを使わずに、手組のSQLファイル
(静的なSQL構文を自動生成されたものを流用するなどして作成したテキストファイル)
を自動生成D層と同じ方式でB層でD層に紐づけてDBアクセスさせる方式にしようとしています。
(先行開発で、実現できることは確認しました。SQLのコード量は増える可能性がありますが、
開発や保守の学習コストが小さそうではと考えたり、性能対策が必要になった時にしやすいのではと考えています。)
何か致命的な問題等ございましたら、ご指摘を頂けますと助かります。
→ データアクセスには様々なパターンがあるので、個別に、工夫してもらってOKと思います。
D層(Dao)の種類 - Open 棟梁 Wiki
・自作Daoクラス
・汎用Daoクラス(CmnDao)
・自動生成Daoクラス
(3)複数テーブルを結合するSQLの生成機能
複数テーブルを結合するSQLの自動生成を
Open棟梁でできないか?と考えています。
テーブル結合SQLの自動生成ツールより
・SQLの記述の統一化(保守性の向上)
・SQLのコーディングミス(SQLインジェクションなどのセキュリアコーディング含む)の排除
が見込めるので、製造工程の効率化に加えて、テスト工程でも効率化ができる、ととらえています。
(a)テーブル結合SQLの自動生成ツールを作ったことはありますか?
SQL定義ファイルの生成なので、所定の詳細設計書のフォーマットからの生成などを考えています。
(b)Open棟梁が自動生成するsqlを利用する前提とし、(a)は利用しないような
Open棟梁のコーディングルールや手順がありましたら、教えてください。
メインテーブルの select → マスタテーブルのレコード検索
(マスタ×メインレコード数分の繰り返し)とすると
SQL発行回数が多くなるので、性能に影響がありそうなものと考えました。
→ 以下、回答になります。
(a)テーブル結合SQLの自動生成ツール開発の事例はなく、
・基本的には、以下の様に考えています。
・単テーブルSELECT以外のSQLは基本的にCmnDao経由で実行。
・JIONクエリ作成は、クエリ・ビルダなどのツールを使用
SQL ServerのExpressでも使用できそうです。
・上記で生成したクエリを「動的パラメタライズド・クエリ分析ツール」を使用してタグ付け&動的化。
・動的パラメタライズド・クエリ分析ツール - Open 棟梁 Wiki
・品質に大きく影響しない認識
参照系のDao、SQLをEXCELから生成しても・しなくてもあまり品質に影響しない認識です。
(イベント仕様書がしっかり書かれていれば問題は少ない。ただし、
スキルに問題がある場合は、SQL定義ファイルを作成するのはアリだと思います)
・開発支援ツールの自動生成方式 - マイクロソフト系技術情報 Wiki
(b)コード変換方式の決定はPJ判断だと思いますが、
コード変換をP層でパフォーマンス良くやる方法はあります。
こちら(WebForm)でやったことですが、
ComboBoxをCustomControl化してRead OnlyのComboBoxを
データバインディング後、テキストボックスに化けさせる方法を採用したことがあります。
OpenTouryoProject/OpenTouryo Wiki
Tutorial_Automatic_Screen_Generation(TableMaintenance).ja
Open 棟梁チュートリアル (テーブルメンテナンス画面自動生成編)
4.2.2 外部キー列のコントロールをドロップダウンリストに変更する
この方法だと、マスタデータからSELECT×1回でデータセットを取得し処理できます。
同様のことが、MVCのHTML Helperでもできるのではないか?と思います。
カスタム HTML ヘルパー (c#) の作成 | Microsoft Docs