Я создаю веб-приложение с использованием ASP.NET MVC и пытаюсь использовать дизайн, управляемый доменом. У меня есть вопрос архитектуры.
У меня есть таблица WebControl для хранения ключей и значений для списков, чтобы их можно было редактировать. Я включил это в свою бизнес-модель, но это приводит к большому количеству избыточного кода, и я не уверен, что он там есть. Например, в моем классе Request у меня есть свойство NeedType. Поскольку это происходит из списка, я создал класс NeedType для предоставления значений для переключателей. Я показываю здесь только один пример, но форма будет иметь приблизительно дюжину списков, которые должны поступить из базы данных.
[править, чтобы уточнить вопрос] Какой лучший способ сделать это? Эти объекты списка действительно являются частью моего домена или они существуют только для пользовательского интерфейса? Если они не являются частью домена, то они не входят в мой основной проект, поэтому куда они идут?
public class Request : DomainObject
{
public virtual int RequestId { get; set; }
public virtual DateTime SubmissionDate { get; set; }
public virtual string NeedType { get; set; }
public virtual string NeedDescription { get; set; }
// etc.
}
public class NeedType : DomainObject
{
public virtual int NeedTypeId { get; set; }
public virtual string NeedTypeCode { get; set; }
public virtual string NeedTypeName { get; set; }
public virtual int DisplayOrder { get; set; }
public virtual bool Active { get; set; }
}
public class RequestController : Controller
{
private readonly IRequestRepository repository;
public RequestController()
{
repository = new RequestRepository(new HybridSessionBuilder());
}
public RequestController(IRequestRepository repository)
{
this.repository = repository;
}
public ViewResult Index(RequestForm form)
{
ViewData.Add("NeedTypes", GetNeedTypes());
if (form == null)
{
form = new RequestForm();
form.BindTo(repository.GetById(125));
}
}
private NeedType[] GetNeedTypes()
{
INeedTypeRepository repo = new NeedTypeRepository(new HybridSessionBuilder());
return repo.GetAll();
}
}