ドメイン層での仕様パターンの予測-問題が予想されます

データアクセス層は、最もデリケートなトピックの1つです。

適切なデータアクセス層を作成するのは簡単な作業ではありません。 信じられないほど多くの実装例がありますが、適切なものはごくわずかです。

リポジトリテンプレートの実装を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 ).



All Articles