私は適切なタイトルを考え出すために最善を尽くしました、それがあまり意味をなさない場合は言い訳をします。以下で詳しく説明したいと思います。.Net Frameworkに基づいており、データストレージとしてSQLを使用するアプリケーションがあります。他のアプリケーションと同様に、このアプリケーションは、たとえば追加のデータ変換と検証をサポートするために、拡張性をサポートする必要があります。
例:アプリケーションを、ユーザーがアクセスまたはExcel(UIとグリッドが既に存在する)を使用してデータをインポートし、データのインポートを可能にする一連の入力テーブルを提供するツールと考えてください。データがインポートされると、ツールは中間モデルを作成し、入力データに対していくつかの計算を実行し、後で結果を事前定義された形式でスローします。入力テーブルスキーマと中間モデルスキーマは固定されており、変更は行われません。中間モデルが入力データから導出される段階では、拡張性が必要です。ユーザーがデータの取得方法を変更できるようにします。たとえば、1つのフィールドでグループ化する代わりに、複数のフィールドでグループ化できるようにします。
この種の柔軟性をサポートするために、私が見ることができるように2つの基本的なアプローチがあることがわかります
オプション1:SQLデータモデルにマップするビジネスモデルを作成し、ビジネスモデルをユーザーに公開して、ユーザーが変換をオーバーライドし、新しい変換を作成できるようにします(たとえば、LINQまたはプレーンC#を使用)
オプション2:SQLデータモデル全体を公開し、ユーザーが生のSQLクエリを埋め込んで変換と検証を実行できるようにします。
私の個人的な好みはオプション1を使用することです。なぜなら、ユーザーが基になるデータテーブルを直接操作できるようにすることはあまり好きではないからです。私はより制御されたアクセスを好みます。ただし、このアプローチでは、ユーザーはプログラミング言語(C#またはVB)を使用する必要があります。一方、オプション2では、生のクエリを作成してアプリケーションに直接プラグインするために、SQLプログラミングの知識を持った人が必要な場合があります。しかし、これは悪いアプローチだと思います。
製品管理チームは、リソースの観点から、より柔軟で実装が容易であると感じているため、オプション2を採用する傾向があります。
そのため、オプション1の傾向をより適切にサポートするために、両方のアプローチの長所と短所を考え出そうとしています。基本的に、単純なSQLクエリを使用するのではなく、C#またはVB.netのプログラミング言語で作業を行う傾向があります。
ご意見・ご感想をお聞かせください。