0

NHibernateを使用してASP.NETMVCeコマースアプリを作成しています。エンドユーザーが製品カテゴリの順序を制御できるようにしたいと考えています(単にそれらをアルファベット順に表示するだけではありません)。

通常、(タイプの)OrderIndex / Sort列intをCategoryテーブルに追加し、プロパティをCategoryドメインクラスに追加します。ただし、問題は、カテゴリが並べ替え、追加、および削除されるときに、この特別なOrderIndex/Sort列を常に管理する必要があることです。呼び出し元がプロパティを直接設定する必要がないように、非表示にして透明にしたいです。

確かに私はこれらすべてを管理するために独自のコードを書くことができましたが、NHibernateに役立つものが組み込まれているかどうか、またはこのプロパティを自動的に接続できるかどうかを知りたいと思いました。

そうでない場合は、OrderedEntity基本クラス(すべてのドメインオブジェクトはエンティティベースから派生)を作成し、IOrderedRepositoryベースリポジトリも作成することを考えていました。このようなもの:

public class Entity
{
    public virtual int Id { get; set; }
}

public class OrderedEntity : Entity
{
    public virtual int OrderIndex { get; set; }
}

public class Category : OrderedEntity
{

}

public interface IRepository<T> where T : Entity
{
    T FromId(int id);
    void Save(T entity);
}

public interface IOrderedRepository<T> : IRepository<T> where T : OrderedEntity
{
    void MoveUp(int places);
    void MoveDown(int places);
}

これは良いアプローチのように見えますか?劣ったホイールを作り直したくありません。

4

1 に答える 1

1

これまでのところ、Hibernateには、コレクションがロードされる@OrderByときの順序を指定できる注釈があることを知っています。しかし、Hibernateは、あなたまたはコレクション内の要素の場合の位置を管理しません。addremove

ただし、それを自分で簡単に実行し、メソッドと親エンティティを提供することができます。addItemこれにより、位置(またはメソッドと提案どおり)が追跡されます。removeItemMoveUpMoveDown

于 2010-01-26T11:10:36.810 に答える