オブジェクト指向言語が再利用機能を提供することは誰もが知っていることです。
シンプルな 3 層アプリケーションがあります。
- プレゼンテーション層
- ビジネス層は、再利用性の利点を享受するように設計されています
- datalayer はばかげた ado.net ライブラリです (ばかげたというのは、ビジネス ロジックが実装されていないことを意味します)。
このデータレイヤーでコードの再利用性を強化するのに苦労しています。データレイヤーのメソッドの 1 つに疑似パターンを貼り付けています。
create connection object
open connection to database
create a transaction object
begin transaction
create command object
execute it
.
.
.
.
create nth command object
execute it
commit transaction
close connection
実際には、このコードは約 300 ~ 400 行のコードに膨れ上がり、このコードを読み取ることができなくなります。
この一連のコマンド実行では、さまざまなテーブルでクエリを選択/挿入/更新しています。トランザクション中でなければ、このコードをそれぞれのクラスに分けていただろう。
私が最近遭遇したスパゲッティ パターンが再びあります。
business layer method1 calls datalayer method to update column1
business layer method2 calls datalayer method to update column2
businees layer method3 calls datalayer method to save the entire result in table by updating it.
このパターンは、再利用性のメリットを享受しようとしたときに発生しました。これらのメソッドは別の場所から呼び出されるため、再利用されました。ただし、再利用性を考慮せずに単純な sql クエリを作成すると、データベースへの呼び出しが 1 回だけになります。
では、データ層で再利用性を実現できるパターンや手法はありますか?
ノート:
- プリコンパイルの利点などを提供するという事実にもかかわらず、ストアドプロシージャを使用したくありません。特定のデータベースにより固有のデータレイヤーを結び付ける傾向があるためです。
- また、現在、プレーンな ADO.net のみで ORM ソリューションを検討していません。
ORM を考慮しない言い訳。
- 学習曲線
- データレイヤー自体のORMコードを制限することで削除できると思われる特定のORMへの密結合を回避します。
- 6 か月前にインターネットをチェックしたところ、その時点で利用可能な、人気のある、または広く使用されている ORM ソリューションは 2 つしかありませんでした。Entity Framework と NHibernate。学習を開始するためにEntity Framework を選択しました (
何らかの理由で後でlink1、link2にリンクしますが、Microsoft が提供しているため、EF を使用するのは簡単だと感じました)。 - 私がこの本で使用したこのMicrosoft 推奨の本には、 TPT、 TPH、および TPCの 3 つの手法がありました 。試したことのないTPC。
- Entity Framework から生成された SQL を確認したところ、非常に見苦しく、余分な列が作成されていました。ID、いくつかの見苦しい Case ステートメントなどです。高度にトランザクションの多いシステムでは、ORM ソリューションを適用できないようです。つまり、毎分 1000 回の挿入が行われているということです。データベースのサイズは拡大し続けており、遠い将来には 500 ~ 600 GB 近くに達するでしょう。