Я рассмотрел более простые приложения, такие как Nerddinner и ContactManager, а также более сложные, такие как Kigg. Я понимаю более простые, и теперь я хотел бы понять более сложные.
Обычно более простые приложения имеют классы и интерфейсы репозитория (так же слабо связаны, как они могут быть) поверх LINQtoSQL или Entity Framework. Репозитории вызываются из контроллеров для выполнения необходимых операций с данными.
Один общий шаблон, который я вижу, когда я рассматриваю более сложные приложения, такие как Kigg или Oxite, - это введение (я только царапаю поверхность здесь, но мне нужно что-то начинать):
- IOC DI (в случае Kigg Unity)
- Менеджер веб-запросов Lifetime
- Единица работы
Вот мои вопросы:
Я понимаю, что для того, чтобы действительно иметь слабосвязанное приложение, вы должны использовать что-то вроде Unity. Но также кажется, что, как только вы внедряете Unity в микс, вам также нужно представить Web Lifetime Manager. Почему это? Почему в примерах приложений, таких как Nerddinner, нет диспетчера жизненных циклов веб-запросов? Что именно он делает? Это единственная особенность?
Вторая картина, которую я замечаю, - это введение Единицы работы. Опять же, тот же вопрос: почему Nerddinner или ContactManager не используют Единицу работы? Вместо этого эти приложения используют классы репозитория поверх Linq2Sql или Entity Framework для обработки данных. Никаких признаков какой-либо Единицы работы. Что именно это и зачем его использовать?
Спасибо
Ниже приведен пример DI в Nerddiner на уровне DinnersController:
public DinnersController()
: this(new DinnerRepository()) {
}
public DinnersController(IDinnerRepository repository) {
dinnerRepository = repository;
}
Итак, правильно ли предположить, что из-за первого конструктора контроллер "владеет" DinnerRepository, и поэтому он будет зависеть от времени жизни контроллера, поскольку он объявлен там?