背景:SQLデータベースをストレージとして使用するデスクトップアプリケーションを開発したいと考えています。データベースに接続しているユーザーは一度に1人だけです。
メンテナンスを容易にするために、GUIをBusnissLogicから分離したいと思います。したがって、各ダイアログにDataModule(BLが実装されている場所)を使用することを考えました。
私の質問:TClientDatasetコンポーネントを挿入する適切な場所はどこですか?ダイアログまたはデータモジュールで直接?
背景:SQLデータベースをストレージとして使用するデスクトップアプリケーションを開発したいと考えています。データベースに接続しているユーザーは一度に1人だけです。
メンテナンスを容易にするために、GUIをBusnissLogicから分離したいと思います。したがって、各ダイアログにDataModule(BLが実装されている場所)を使用することを考えました。
私の質問:TClientDatasetコンポーネントを挿入する適切な場所はどこですか?ダイアログまたはデータモジュールで直接?
個人的には、TDatasetの子孫を常にデータモジュールに配置します。ある時点でフォームを再設計することにした場合でも、データセットを自由に使用できます。フォーム間での情報の共有も簡単になります。一般に、GUIとデータは別々に保管してください。
TClientDataSetが同時に複数の画面で使用されない場合は、便宜上、それらをDataModuleに配置しても安全です。ただし、同じTClientDataSetにアクセスする画面が2つ以上ある場合、データセットにはカーソルが1つしかなく、1つの画面で別のレコードに移動すると、他の画面でも別のレコードに移動するため、問題が発生します。その場合:データを使用する画面にTClientDatasetを配置します。接続はすべてのデータセットで共有されているため、引き続きデータモジュールに接続できます。
DataSetsをDataModulesに配置します。そうすれば、詳細ビューやグリッド内のリストのように、同じデータセットを指す異なるフォームの複数のビューを持つことができ、それらは常に自動的に同期されます。
また、ビジネスルールを使用したデータとプレゼンテーション機能を使用したユーザーインターフェイスの分離を形式化して、ビジネスルールの変更やUIの個別の再設計を容易にします。
また、フォームの複数のインスタンスが異なるデータにアクセスする必要がある場合は、いつでも複数のデータモジュールをインスタンス化し、各フォームを関連するフォームにフックできます。
データモジュールのデータセット(ただし、フォームまたはフレームのデータソース)は、常にうまく機能してきました。
データスナップの方法:
このように、DataSnap(またはclientdatasetsを再利用できる他のn層テクノロジー)を使用して実装をn層に変更する場合は、BLデータモジュールを適切な層に移動するだけです。