Я читаю «Внедрение зависимостей в .NET» Марка Симанна (это фантастика, и обязательно должна иметь), и автор часто использует слово «шов». Но я не могу понять, что это значит. Вот пример использования этого слова:
Глава 7 объясняет, как составлять объекты в различных конкретных средах, таких как ASP.NET MVC, WPF, WCF и так далее. Не все фреймворки одинаково хорошо поддерживают DI, и даже среди тех, кто это делает, способы, которыми они это делают, сильно различаются. Для каждой структуры может быть трудно идентифицировать SEAM, который включает DI в этой структуре. Однако, как только этот SEAM найден, у вас есть решение для всех приложений, которые используют эту конкретную среду. В главе 7 я проделал эту работу для самых распространенных платформ приложений .NET. Думайте об этом как о каталоге каркасов швов.
Я был бы благодарен за помощь в понимании этого слова.
источник
Ответы:
Я думаю, что этот термин происходит от Michael Feathers, эффективно работающего с устаревшим кодом, в котором он объясняет шов в программном обеспечении как место, где встречаются две части программного обеспечения и где можно внедрить что-то еще. Аналогия - шов в одежде: место, где сшиты две части. Часть на каждой стороне касается только другой прямо в шве. Вернемся к программному обеспечению: если вы идентифицировали шов, вы определили место, где есть четко определенный интерфейс. Это то, что вы можете использовать в DI, так как такой интерфейс позволяет вам заменить реализацию без возможности остальной части программного обеспечения (в любом случае, без обмана).
источник
Основываясь на ответе Кристиана, насколько мне известно, термин «шов» происходит из книги Пера «Эффективная работа с устаревшим кодексом» . Определение на странице 31:
Чтобы привести примеры того, что такое шов, а что нет, рассмотрим следующий код Java:
Швы, приведенные в качестве примера выше, будут швами, если:
В основном, швы облегчают юнит-тестирование. Я не могу написать модульный тест для
MyClass
из-за вызововMyStaticClass.staticCall()
и(new MyInstanceClass()).instanceCall()
. Любой тестовый модуль дляMyClass
«SdoBunchOfStuff()
метод должен был бы тестMyStaticClass.staticCall()
и(new MyInstanceClass()).instanceCall()
и все их зависимостей , которые вызываются. И наоборот, используя неконечные классы с не финальными методами (или еще лучше - интерфейсами), внедряются экземплярыFoo
иBarFactory
выполняют модульные тесты дляMyClass
возможности написания, облегчая имитацию.источник