0

私は最初の実験的な DDD プロジェクトに取り組んでいます。このプロジェクトの目的は、DDD の概念全体を把握することです。奇妙なことに、それはより難しい部分だと読んだので、ユビキタス言語の「翻訳」はアーキテクチャ全体よりも簡単だと思うので、私の質問です。

過去のプロジェクトでは L2S (Linq to SQL) しか使用していません。私のアプリケーションは DDD ではありませんでしたが、ビジネス オブジェクト (linq to sql が生成するものを除く) を持っており、このオブジェクトのリポジトリを持っています。例えば、

public class Customer
    {
       public ID {get; set;}
       public string Fullname {get; set;}
       public Address address {get; set;}
       public List<Invoices> invoices {get; set;}
    }

L2S では、このクラスを 3 つの異なるクエリに分割し、データベースに送信する必要があります。私は自分の人生を「より簡単に」するためのマッパー(拡張メソッド)を持っています。このようなもの。

public void AddCustomer(Customer customer)
{
// This customer i am passing is the business object
// For the sake of demo, i am going to avoid the whole attach(), check for ID, etc.
// I think you are going to get what i am trying to do here.

using{ var context = new L2SContext())
{
context.CustomerEntity.InsertOnSubmit(customer.ToEntity());
context.AddressEntity.InsertOnSubmit(customer.Address.ToEntity());
context.InvoicesEntity.InsertAllOnSubmit(customer.Invoices.ToEntity());
}
}

Ok。後で、実際にデータをデータベースに永続化するコンテキストに SubmitChanges() メソッドがあります。

さて、私は NHibernate についてほとんど何も知りません。しかし、いくつかの例を見ると、NHibernate が (マッピングのせいで) すべての内訳を処理してくれるのではないかと疑っています。あれは正しいですか?

NHibernate から大きなメリットが得られるのであれば、喜んで NHibernate を学びます。

私の質問をチェックしていただきありがとうございます。

編集: Codesmithtools.com について聞いたことがありますか? LinqToSql、EF、NHibernate 用のフレームワーク ジェネレーターがあります。NHibernate を試した人はいますか? 私はLinqToSqlにPLINQOを使用しましたが、それらはクラスに非常に多くのがらくたを追加するので、不要だと思います。ほとんどのクラスは、ビジネスクラス、DTO、ViewModelsなどとして、下手なプログラマーに使用するのに適しています。オールインワン:)。ひどい。しかし、彼らはそれをすべて生成するのが本当に得意です。私は彼らにKUDOSを与えなければなりません。

4

2 に答える 2

1

DDD 用の Linq-2-SQL 上の NHibernate に関するいくつかのポイント:

  • 到達可能性による永続性。これはカスケード保存とも呼ばれますが、顧客エンティティを明示的に挿入しなくても保持できます。Customer は集合体で、Address は値オブジェクトになるため、これは DDD にうまく適合します。NHibernate では、値オブジェクトはコンポーネント マッピングとして表され、エンティティと集約はクラス マッピングとして表されます。集約は単一のユニットとして永続化および取得する必要があり、NHibernate ではこれを行うことができます。

  • 持続性無知。NHibernate を使用すると、追加のライブラリを参照することなく、クラスを純粋な POCO として設計できます。私が覚えている限りでは、L2S ではコレクションに特別な型が必要であり、プロパティとして明示的な外部キーも必要でした。NHibernateの永続性を使用しても、無知であることは理想であり、目標ではないことに注意してください。

他の人が指摘したように、NHibernate には急な学習曲線があります。たとえば、遅延読み込みは問題になる可能性があります。しかし、それは全体的に価値があります。

于 2012-11-13T20:13:13.440 に答える
0

あなたの質問は自由回答です。Linq-2-SQL がどのように機能するかは明らかです。最初のコメントがすでに述べたように: はい、NHibernate はカスケード セーブを提供できます。しかし、これはほんの始まりにすぎません...まず、この質問と回答を確認してください(興味深いものが複数あります):

NHibernate と LINQ to SQL の比較

私はNHibernateプライベートプロジェクトで最初の選択肢として使用しています。可能であれば、どのプロジェクトでもそれを好みます。しかし、私の経験から、もう1つNOTEを追加したいと思います:

最大の利点は、一度学習して使用すれば、他のORMツールを使用NHibernateするのはそれほど難しくないということです。いくつかのプロジェクトでは、 LLBLジェネレーターで Entity Framework に遭遇するでしょう (私はそうでした) NHibernate

  • ORMはエンティティ/ドメイン駆動型の実装を強制するため、ドメインを理解する
  • 標準パターンを使用する

それが役に立ち、幸運を祈りNHibernateます。学習曲線は予想より遅いかもしれませんが、メリットが待っています。

于 2012-11-13T17:06:51.733 に答える