Для меня это был DI / IOC & Mocking.
Все началось с того, что я научился юнит-тестированию. Я быстро понял, что это означает, что когда вы вызываете код, он запускает ВСЕ ваш код прямо в базу данных. Поэтому я задал следующий очевидный вопрос: «Как я могу провести модульное тестирование своей бизнес-логики, не отправляя ее в мою базу данных?»
Когда мне рассказали о насмешках, это звучало как дополнительная работа. Особенно весь код, который я должен был написать, выбрал, когда использовать тест в тесте, а когда использовать «настоящую» версию в производстве.
Поэтому я задал следующий вопрос: "Есть ли способ это упростить?" Ответ был: «Да, конечно, используйте DI & IoC. Мне объяснили это, и у меня взорвалась голова. Это не имело никакого смысла, это был точный противоположный способ написания кода за последние 10 лет.
Конечно, теперь мне нравится, что эта модель делает для меня. Чистая сепарация, простота тестирования. Но когда я впервые начал узнавать об этом, это всерьез взволновало меня!
Пример небольшого проекта, чтобы показать это? Смотрите скриншоты на DotNetRocks TV.