Я пытаюсь решить, как обрабатывать классы и интерфейсы на уровне домена в отношении объектов, заполненных через ORM (в данном случае NHibernate). Я разработал очень простой сценарий, который помогает проиллюстрировать мою текущую ситуацию.
public interface ICar
{
public bool PassesEmisionStandards(string state);
public int Horsepower { get; set; }
public string Model { get; set; }
}
public class CarFromDB
{
public int Horsepower { get; set; }
public string Model { get; set; }
}
public class ModelT : CarFromDB, ICar
{
public bool PassesEmissionStandards(string state)
{
return false;
}
public override string ToString()
{
return Model + " with " + Horsepower + " ponies";
}
}
В этом случае CarFromDB - это класс, который получил отображение через NHibernate в мою базу данных. ICar - это интерфейс, который обрабатывает мой код пользовательского интерфейса / контроллера. ModelT - это один из классов, экземпляры которых передаются в пользовательский интерфейс.
В моем реальном домене PassesEmissionStandards - это сложный метод, который значительно отличается среди различных производных классов, а класс CarFromDB имеет дюжину простых свойств наряду со ссылками на другие классы, как по отдельности, так и в списках. Эта информация используется в эквиваленте PassesEmissionStandards.
Я не совсем понимаю, как лучше всего получить мои производные классы, украшенные интерфейсом, когда я начну с заполненного базового класса из ORM. Вот идеи, с которыми я столкнулся, чтобы попытаться справиться с этим:
- Украсьте CarFromDB с помощью ICar и попытайтесь найти чистый способ реализовать в нем обширный метод PassesEmissionStandards или обратиться к другим классам за помощью
- Используйте AutoMapper или эквивалентную + фабрику, чтобы преобразовать мои объекты базового класса в объекты производного класса
- Поскольку тип производного класса можно определить по свойству базового класса, сопоставьте производные классы для NHibernate и найдите способ подключиться к NHibernate, чтобы указать, какой из производных классов следует использовать.
Я чувствую, что это, должно быть, очень распространенная проблема, но я искал SO и другие места, не найдя каких-либо твердых указаний. Обратите внимание: я относительно новичок в области ORM и моделирования доменов и очень плохо знаком с NHibernate. Любая помощь приветствуется.