Имам въпрос кой е най-добрият дизайн за услугата за моя домейн. Случаят на използване е да се създадат някои обекти въз основа на избрани от потребителя условия.
Работният процес на приложението, което ще използва тази услуга:
- Потребителят избира някои условия (като дата и други данни)
- Той получава списък с "предложения" на субектите. Той може да избере всички от тях или само някои.
- Субектите са създадени
Какъв би бил най-добрият дизайн за услугата за домейн? Имам две предвид:
Решение 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