Я пишу приложение электронной коммерции ASP.NET MVC с использованием NHibernate, и я хочу, чтобы конечный пользователь мог контролировать порядок размещения категорий товаров (а не просто отображать их в алфавитном порядке и т. Д.).
Обычно я бы добавил столбец OrderIndex / Sort (типа int
) в таблицу Category, а свойство - в класс домена Category. Но проблема заключается в необходимости постоянно управлять этим специальным столбцом OrderIndex / Sort, поскольку категории сортируются, добавляются и удаляются. Я предпочел бы скрыть это и сделать его прозрачным, чтобы вызывающим не приходилось устанавливать свойство напрямую.
Конечно, я мог бы написать свой собственный код для управления всем этим, но хотел знать, есть ли в NHibernate что-нибудь, что могло бы помочь мне, или оно могло бы автоматически подключить это свойство.
Если нет, то я думал о создании базового класса OrderedEntity (все доменные объекты наследуются от базы Entity), а также о создании базового репозитория 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);
}
Это похоже на хороший подход? Я не хочу изобретать низшее колесо.