Что было бы лучше сделать (передать объект в службу или имя пользователя в службу?) - PullRequest
1 голос
/ 27 сентября 2011

что было бы лучше сделать

public ActionResult Test()
{
    User user = accountService.GetUser(User.Identity)
    Product project = productService.GetSomething(user);
    Store store = storeService.GetSomething(user);
}

 Or

public ActionResult Test()
{
    Product project = productService.GetSomething(User.Identity);
    Store store = storeService.GetSomething(User.Identity);
}

В первом у меня есть сервисный слой, который принимает имя пользователя и вызывает репозиторий, чтобы получить запись пользователя обратно. Затем я передаю его и использую в других слоях обслуживания.

Теперь в варианте 2 я передаю имя пользователя, и на этом сервисном уровне я вызываю то же репо, что и accountService.

Разница лишь в том, что я передаю строку против объекта.

Вижу, у меня есть как положительные, так и отрицательные стороны. Если у вас есть только один метод, для которого нужны пользовательские данные, то отчасти нужно сослаться на другой слой службы, чтобы получить его и передать в другой.

Если у вас их несколько, он потенциально может сохранить некоторые запросы в базу данных (однако я в любом случае могу просто кэшировать его)

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

Закон Деметры: http://en.wikipedia.org/wiki/Law_of_Demeter

Или, что еще лучше, посмотрите на эту часть превосходного Чистого Кода. Google Talk: http://www.youtube.com/watch?feature=player_detailpage&v=RlfLCWKxHJ0#t=944s Там Закон Деметров очень хорошо объясняется.Или просто посмотрите видео целиком, кстати, все они хороши.

Короче говоря, передача наименьшего возможного компонента делает код более читабельным, более выразительным, более тестируемым.Чем «больше» объект, тем больше он скрывает намерения метода / конструктора, использующего его.И чем сложнее / сложнее создать позднее заглушку / макет, тем более что ваши собственные классы имеют тенденцию «расти» со временем.Если вам вообще не нужно создавать заглушки (поскольку вы используете, например, типы значений, как в вашем случае, а не ссылочные типы), это лучшее, что вы можете достичь.

0 голосов
/ 27 сентября 2011

Как правило, чем тяжелее, тем лучше. Хотя ваш объект может иметь только три поля, это по-прежнему означает, что для каждого объекта будет отправлено гораздо больше данных.

Как правило, вы хотите отправить крошечный бит уникального идентификатора, который вам не нужен. Если возможно, я отправил бы UserID, предполагая, что это числовой элемент данных, и ваш сервис получил бы всю остальную информацию, которая ему нужна, из бэкэнда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...