前提・実現したいこと
クエリ発行用メソッドを分かりやすく管理したいのですが、
どうやって管理するのが一般的または王道なのでしょうか。
発生している問題
現在、以下のようにフォームやクラスごとに、それぞれが使用するクエリをまとめたクラスを作っています。
class MyForm : Form { public void Method() { MyFormQueries.InsertSomething() } } //MyFormで使うクエリは全部MyFormQueriesクラスに記述 class MyFormQueries { public static void InsertSomething() { //クエリ発行 } } class MyClass { public void Method() { MyClassQueries.InsertSomething() } } //MyClassで使うクエリは全部MyClassQueriesクラスに記述 class MyClassQueries{ public static void InsertSomething() { //クエリ発行 } }
問題点
得られたメリットは、各フォーム・クラスから送るクエリを変えたい時に、該当のフォーム・クラス名を見ればすぐにクエリが見つかり、
そのクエリを変えても他のフォーム・クラスに影響を与えない点です。
デメリットは、色々なクラスに、全く同じや似たようなクエリメソッドが出来てしまいました。
また、テーブル設計変更があった場合、該当のテーブルにアクセスするクエリが分散しすぎて、把握出来なくなりそうな点です。
試したこと
テーブル単位で、そのテーブル宛に発行するクエリを集中管理するクラスを作り、そこにクエリを全部入れました。
class MyForm : Form { public void Method() { UserDataTableQueries.InsertSomething() } } class MyClass { public void Method() { UserDataTableQueries.SelectSomething() } } //UserDataテーブルのデータにアクセスするクエリは全部ここに登録 class UserDataTableQueries { public static void InsertSomething() { //クエリ発行 } public static IEnumerable SelectSomething() { //クエリ発行 } //大量のクエリメソッド }
問題点
得られたメリットは、テーブル設計変更しても、そのテーブルにアクセスするクエリ用メソッドを容易に探せることです。
※JOINするクエリの場合は少し気を使いますが・・・
デメリットは、1つのクラスに(事実上、多数のフォーム・クラス固有の)メソッドが集中しすぎて見辛くなり、
使うクエリと使わないクエリが分かり難くなりました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。