適切なデータアクセス層を作成するのは簡単な作業ではありません。 信じられないほど多くの実装例がありますが、適切なものはごくわずかです。
リポジトリテンプレートの実装をDALと見なすことはできますか?
これは、MS msdn.microsoft.com/en-us/library/ff649690.aspxが提供するものです。
そして、こちらが地元の作品habrahabr.ru/post/52173です
オプションはかなり普通です。
しかし、私が見るとき
「リポジトリは、データベースにアクセスするためのファサードです。」...
Domain Laye r- Repository - Storage Laye r(単なる用語)の分割を好む
レイヤーメンバー
ドメイン層
集約ルート
-martinfowler.com/bliki/DDD_Aggregate.html (簡単に言えば-リポジトリが知っているオブジェクトモデルオブジェクト)問い合わせ
(実際に彼について話す)-サブジェクト領域の観点から形成されなければならないリポジトリ
His下
リポジトリ
-martinfowler.com/eaaCatalog/repository.htmlマッパー
-martinfowler.com/eaaCatalog/mapper.html (ストレージエンティティを集約ルートに、またはその逆に変換する方法を知っています)うわー
-martinfowler.com/eaaCatalog/unitOfWork.html (これがなければ、エラーの余地はありませんが、それがあると)ストレージ層
ストレージエンティティ
-これについて簡単に言うことはできません。したがって、DALは6(マッパーがリポジトリの一部と見なされる場合は5)ブロックであり、それぞれが重要な役割を果たします。
クエリはオプションをフィルタリングするだけです。 リポジトリへのリクエストとして、仕様www.codeproject.com/Articles/670115/Specification-pattern-in-Csharpのアイデアがとても気に入っています。habrahabr.ru/post/171559もあります。
フィルターの個別のクラスを形成することはまあまあですが、それをすべて使い始めると
query = CarSpecifications.ByMark( mark ). And( CarSpecifications.ByColor( color ).Not() ) ; cars = carRepository.Get(query);
, . , , CarSpecifications.
x=>x.GroupName == groupName - :
public class UserQueryExtensions { public static IQueryable<User> WhereGroupNameIs(this IQueryable<User> users, strin name) { return users.Where(u => u.GroupName == name); } }
10 , .
Or Not. DI.
. , ( ,
new ExpressionSpecification(o => o.BrandName == BrandName.Samsung);)
, Repository .)
.
( Aggregation root).
, . – . Specification ,
, Repository ISpecification<D> Predicate<S> ?
.
S S -> D () D . , , .
: , , 50 .
S, GetAll… OutOfMemory.
, « , , ».
. , . 1
1 S, S -> D, IsSatisfiedBy( D )
2 S, S -> D, IsSatisfiedBy( D )
3 S, S -> D, IsSatisfiedBy( D )
K
50000 S, S -> D, IsSatisfiedBy( D )
50 + 50 + 50 * n , =
( , , ) ( , SQL Dos ).
?
, , m ,
50 / m + 50 + 50 * n , = .
, , .
. … , ( ).
P.S.
, , GetAll S, S -> D , IsSatisfiedBy( D ).