Я думаю, вы должны попытаться найти баланс между тем, что "хороший дизайн" и что работает для вас.
Например, у меня есть приложение MVC, которое использует ASP.NET Membership
, но у меня также есть пользовательская таблица User
, в которой я храню такие вещи, как изящное имя пользователя или OpenID. В этом же приложении у меня есть IAdminService
, который обрабатывает все, что касается администрирования пользователей.
IAdminService
возвращает контроллеру класс AdminUser, который выглядит следующим образом:
public class AdminUser
{
public string UserName { get; set; }
public User User { get; set; }
public MembershipUserWrapper MembershipUser { get; set; }
}
MembershipUserWrapper
- это просто оболочка вокруг значения по умолчанию MembershipUser
, позволяющая проводить тестирование и обеспечивать большую гибкость в целом.
В любом случае, вы можете утверждать, что AdminUser
на самом деле является моделью представления, и у меня действительно есть пара представлений, строго типизированных как AdminUser
. Было бы излишне усложнять вопросы, чтобы не дать IAdminService
вернуть AdminUser
только потому, что он находится на «уровне обслуживания», и в этом случае вам не нужен контроллер, выполняющий «преобразование» из User
и MembershipUserWrapper
до AdminUser
каждый раз.
Является ли правильным, чтобы работник workerService возвращал в Контроллер объекты Person и Worker?
Я думаю, что в этом случае это, вероятно, так. У вас может быть два отдельных сервиса, но большая часть логики для извлечения Worker
и Person
, вероятно, одинакова, поэтому вы будете вынуждены либо повторить много кода, либо создать третий сервис, который выполняет общие задачи.
Вы должны обратить внимание на правильное проектирование, но также принять во внимание K.I.S.S. и YAGNI . Делайте то, что имеет смысл сейчас, и при необходимости делайте рефакторинг соответственно.