У меня есть вопрос о том, какой дизайн лучше всего подходит для моего доменного сервиса. Вариант использования заключается в создании некоторых объектов на основе выбранных пользователем условий.
Рабочий процесс приложения, которое будет использовать этот сервис:
- Пользователь выбирает некоторые условия (например, дату и другие данные)
- Он получает список «предложений» сущностей. Он может выбрать все из них или только некоторые.
- Сущности созданы
Каков был бы лучший дизайн для службы домена? Я имею в виду два:
Решение 1
interface IMyDomainService
{
IEnumerable<EntityProposition> GetEntitiesPropositions(Conditions conditions);
void CreateEntities(Conditions conditions);
}
В этом случае у меня, вероятно, будет какой-то частный метод в службе, который будет использоваться обоими из них. Класс EntityProposition в основном представляет собой 1:1 того, что будет отображаться в представлении. В этом классе есть некоторые данные, которые не являются частью самого объекта.
Решение 2
interface IMyDomainService
{
IEnumerable<EntitiyData> GetDataForEntities(Conditions conditions);
void CreateEntities(IEnumerable<EntityData> entities);
}
То, что было бы закрытым методом в Решении 1, теперь отображается в интерфейсе. Класс EnityData содержит все данные для объекта, необходимые для создания самого объекта и отображения всех данных для просмотра.
Чтобы добавить некоторый контекст: эта служба теперь используется непосредственно контроллером ASP.NET MVC. Мне кажется, что если я выберу решение № 2, мне придется создать какую-то дополнительную службу приложения, чтобы она обернула логику получения данных и создания сущностей.
РЕДАКТИРОВАТЬ 1
Я задам вопрос с другой точки зрения: должен ли мой контроллер выглядеть так:
public ActionResult GetPropositions(Condtidions condtitions)
{
var entitiyData= service.GetEntityData(conditions);
return Json(entitiyData.ToViewModel());
}
public void CreateEntities(Conditions conditions)
{
var entitiyData= service.GetEntityData(conditions);
service.CreateEntities(entitiyData);
}
or:
public ActionResult GetPropositions(Condtidions condtitions)
{
var propositions = service.GetPropositons(conditions);
return Json(propositions.ToViewModel());
}
public void CreateEntities(Conditions conditions)
{
service.CreateEntities(conditions);
}
Конечно, это упрощенный пример, просто чтобы показать мою точку зрения.
Редактировать 2
В качестве дополнения: сначала я выбрал решение № 2, но позже мои требования изменились, и мне пришлось вернуться к решению № 1. Причина заключалась в том, что после создания предложений пользователь мог выбрать несколько из них, но с тем же объемом (условиями).
ToViewModel
является методом расширения. Потому что он не принадлежит домену. Что касается вашего редактирования,GetPropositons
больше похоже на язык домена. - person jgauffin   schedule 19.06.2013