0

私は現在 Fluent NHibernate を勉強していますが、マッピングについて質問があります。これは問題ではありませんが、ベスト プラクティスの質問です。

Fluent NHibernate には新しい流暢なマッピングがあり、エンティティ クラスで使用されるフィールドをマッピングするための新しいクラスが必要であることを私は知っています。マッピング クラスがエンティティ クラスに直接リンクされている場合 (エンティティ クラスに正確にマップされます)、同じ .cs ファイル内で結合できないことがベスト プラクティスで規定されているのでしょうか? ここではネストされませんのでご注意ください。

つまり: Product クラスと ProductMap クラスがあり、どちらもデータベースの Product テーブルに対応しているため、次のように両方のクラスを同じ Product.cs 内に配置します。

namespace Business.Entity
{
    public class Product
    {
        ...
    }

    public class ProductMap : ClassMap<Product>
    {
        ...
    }
}

クラスが同じファイル内にあってはならない場合、その理由を説明していただけますか?

前もって感謝します!

4

3 に答える 3

1

インスタンスを作成するときに、SessionFactoryどのアセンブリにマッピング定義があるかを示すクラスを渡します。次に、リフレクションを使用して、から継承するこのアセンブリのすべてのクラスを反復処理しますClassMap<T>

つまり、初期化を高速化するには、このアセンブリをできるだけ軽くする方がよいということです。つまり、クラス定義ではなくマッピングのみを保持するアセンブリを作成する方がよいということです。

の知る限り、これが唯一の違いです。フィードバックをお待ちしております。

于 2012-09-03T17:13:48.670 に答える
1

可能な限りエンティティを永続的に無視するように設計する必要があります。

つまりProduct、から派生させるべきではありませんClassMap<Product>。ただし、エンティティと同じプロジェクトProductMapにあるべきではないことも意味します。

通常、マッピングを含む DAL プロジェクトと、エンティティを含むドメイン/ビジネス プロジェクトがあります。

于 2012-09-03T17:14:23.393 に答える
1

異なる名前空間であっても、両方のクラスを異なるファイルに保持できます。ただし、初心者の場合は、エンティティ クラスを別のファイルに保持し、同じ名前空間内の別のファイルにクラスをマップすることができます。

/* Product.cs */
namespace Business.Entity
{
    public class Product
   {
    ...
   }
}

/* ProductMap.cs */
namespace Business.Entity
{
    public class ProductMap : ClassMap<Product>
    {
    ...
    }
}
于 2012-09-04T17:34:15.100 に答える