Есть много вопросов о том, являются ли синглеты "плохими", и какие шаблоны использовать вместо них.Как правило, они ориентированы на шаблон проектирования синглтона, который включает извлечение экземпляра синглтона из статического метода класса.Это не один из этих вопросов.
С тех пор, как я действительно "обнаружил" внедрение зависимостей несколько месяцев назад, я управлял его внедрением в нашей команде, со временем удаляя статические и одноэлементные шаблоны из нашего кода, ииспользуя конструктор на основе инъекций везде, где это возможно.Мы приняли соглашения, чтобы нам не нужно было добавлять явные привязки к нашим модулям DI.Мы даже используем инфраструктуру DI для предоставления экземпляров регистратора, чтобы мы могли автоматически сообщать каждому регистратору, в каком классе он находится, без дополнительного кода.Теперь, когда у меня есть единственное место, где я могу контролировать, как связаны различные типы, действительно легко определить, каким должен быть жизненный цикл конкретной категории классов (служебные классы, репозитории и т. Д.).
Вначале я думал, что связывание классов как синглетонов, вероятно, будет иметь некоторое преимущество, если я ожидаю, что они будут использоваться довольно часто.Это просто означает, что происходит намного меньше new
, особенно когда создаваемый вами объект имеет большое дерево зависимостей.Практически единственными нестатическими полями в любом из этих классов являются те значения, которые вставляются в конструктор, поэтому при хранении экземпляра, когда он не используется, сравнительно мало накладных расходов.
Затем я читаю «Синглтон».Я люблю тебя, но ты меня опускаешь »на www.codingwithoutcomments.com, и это заставило меня задуматься, была ли у меня правильная идея.В конце концов, Ninject компилирует функции создания объектов по умолчанию, поэтому при создании дополнительных экземпляров этих объектов очень мало затрат на отражение.Поскольку мы скрываем бизнес-логику от конструктора, создание новых экземпляров - это действительно легкая операция.И у объектов нет группы нестатических полей, поэтому при создании новых экземпляров также не требуется много дополнительной памяти.
Итак, сейчас я начинаю думатьчто это, вероятно, не будет иметь большого значения в любом случае.Есть ли дополнительные соображения, которые я не учел?Кто-нибудь действительно испытал значительное улучшение производительности, изменив жизненные циклы определенных типов объектов?Является ли следование паттерну DI единственно важной вещью, или есть другие причины, по которым использование одного экземпляра объекта может быть по сути «плохим»?