新しいプロジェクトで使用するデータアクセスレイヤーに影響する要因は何ですか?
-
03-07-2019 - |
質問
クラスのレッスンを教えますが、データアクセステクノロジーの決定に影響する要因を説明する必要があります。 型付きデータセット、Linq to SQL、Linq to Entities、.netTiers、LLBLGen、SQL接続オブジェクトおよびコマンドオブジェクトを使用したカスタム呼び出しなど、多くのデータアクセス方法に精通しています。 私のクライアントの中には、ストアドプロシージャの使用のみを許可するものがあり、他のことについては話しません。 一部のクライアントは、まだ.NET 3.5をインストールする準備ができていません。 一部のクライアントでは、Webアプリケーションに中間Webサービス層が必要です。 ほとんどの場合、タイプデータセットとカスタムWebサービスを使用するか、CodeSmithで.netTiersを使用します。他に何を考えるべきですか?
解決
ソフトウェアプロジェクトのすべての選択肢と同様に:それは依存します... しかし、私の意見では、最も重要な要素はプロジェクトの環境です。
これは(このリストがとにかく完全であると主張するものではありません)で構成されています:
- 開発チームおよび保守チーム内で利用可能なスキル(異なる場合)
- 必要な機能
- クライアントによって設定される制約(すべてのクライアントが利用可能なすべての技術をサポートしているわけではありません。これは、レガシーシステムを段階的に交換したり、新しいシステムを環境に導入するときに考慮する必要があります)
- 法律によって設定された制約
これがお役に立てば幸いです。
他のヒント
覚えておくべき重要なことの1つは、データベースが必ずしもアプリケーションのバッキングデータストアであるとは限らないということです(単独で)。他のアプリケーションやプロセスでは、特に大規模な企業や企業向けのデータベースへのアクセスが最終的に必要になる可能性があります。データベース(またはアプリケーション)、特に十分な時間が与えられます。
検討することが重要です:
また、設計上の考慮事項もいくつかあります。選択の高速化または書き込みの高速化のためにチューニングしていますか?あるデータアクセスデザインは、別のデータアクセスデザインよりもパフォーマンスが高い場合があります。
私は単一の特効薬があるとは述べていませんが、私が注意することは、データアクセスのデザインパターンには“大きな画像”考え-それは今日の懸念に対処し、合理的に予測できることは明日のニーズかもしれませんか?
また、一貫したデータアクセスのための外部APIまたはフレームワークを提供しますか?直接または間接的に公開されますか?
そこには、Entity Framework / LINQ to SQL、従来のストアドプロシージャ、およびNHibernateなどのその他のツールの両方がありますが、最初にテクノロジーの選択を正当化し、合理化する必要があります。現在および将来のニーズに適切であることを確認してください。
編集:すみません、大きなものを忘れました:保守性。一部のテンプレート駆動型ソリューションは、スキーマの変更後にDALを再生成できるという点で、他のソリューションよりも優れています(手書きのストアドプロシージャなど)。生産性の向上とデメリットを比較検討する価値があります。
元の投稿とnorbertBの追加の間に、ほぼすべてをカバーしたと思います。絶対的な制約から始めます(そして、クライアントが絶対に何かを言ったからといって、それが絶対だと言ったからといって、心を変えられないというわけではありません...)。絶対的な制約でフィールドを絞り込んだら、他のものを見てください。
除外されているように思われることの1つは、柔軟性です。たとえば、2つの同様のテクノロジーから選択しようとしていて、一方が更新可能なビューをサポートでき、もう一方が更新できないビューをサポートできないことを知っていた場合、たとえその時点で更新可能なビューがまったく必要でなかったとしても、 ;念のため"。
私は本当に2つのことしか考えていません。 1つ目は、他の何かが重要になるほど大量のデータを取得するかどうかです。テーブルに数百万行を入れていない場合、それらはすべて十分に高速に動作するため、どのテクノロジーを使用するかはおそらく問題ではありません。
2番目のことは、LINQを使用できるかどうかです。LINQを使用して(SQL、エンティティ、LLBLGenのいずれでもかまいません)データベースを照会すると、2つの重要なことがわかります。 1つ目は、クエリを書くのが非常に簡単であるということです。2つ目は、要件が変更された場合に、LINQを必要とする2つのフレームワーク間を適度に簡単に切り替えることです。