Czytam „Dependency Injection in .NET” Mark Seemann (jest fantastyczny i musi mieć), a autor często używa słowa „szew”. Ale nie rozumiem, co to znaczy. Oto przykład użycia tego słowa:
Rozdział 7 wyjaśnia, jak komponować obiekty w różnych konkretnych ramach, takich jak ASP.NET MVC, WPF, WCF i tak dalej. Nie wszystkie frameworki obsługują DI równie dobrze, a nawet wśród tych, które to robią, sposób, w jaki to robią, bardzo się różni. Dla każdego szkieletu może być trudne zidentyfikowanie SEAM, który umożliwia DI w tych ramach. Jednak po znalezieniu SEAM masz rozwiązanie dla wszystkich aplikacji korzystających z tego konkretnego frameworka. W rozdziale 7 wykonałem tę pracę dla najpopularniejszych platform aplikacji .NET. Pomyśl o tym jak o katalogu SEAMS.
Byłbym wdzięczny za pomoc w zrozumieniu tego słowa.
źródło
Odpowiedzi:
Myślę, że termin ten pochodzi od Michaela Feathersa, który skutecznie współpracuje ze starszym kodem, w którym wyjaśnia szew w oprogramowaniu jako miejscu, w którym spotykają się dwie części oprogramowania i gdzie można wstrzyknąć coś innego. Analogią jest szew w ubraniu: miejsce, w którym dwie części są ze sobą połączone. Kawałek z każdej strony dotyka tylko prawej strony szwu. Powrót do oprogramowania: Jeśli zidentyfikujesz szew, zidentyfikujesz miejsce, w którym istnieje dobrze zdefiniowany interfejs. To właśnie możesz wykorzystać w DI, ponieważ taki interfejs pozwala zastąpić implementację bez reszty oprogramowania, która jest w stanie powiedzieć (w każdym razie bez oszustwa).
źródło
Opierając się na odpowiedzi Christiana, zgodnie z moją najlepszą wiedzą, termin szew pochodzi z książki Feathers, Skutecznie współpracując ze starszym kodeksem . Definicja znajduje się na stronie 31:
Aby podać przykłady, czym jest szew, a czym nie jest, rozważ następujący kod Java:
Szwy przedstawione powyżej byłyby szwami, chyba że:
Zasadniczo szwy ułatwiają testowanie jednostkowe. Nie mogę napisać testu jednostkowego dla
MyClass
ze względu na połączenia doMyStaticClass.staticCall()
i(new MyInstanceClass()).instanceCall()
. Wszelkie testy jednostkowe dlaMyClass
„sdoBunchOfStuff()
metodą musiałby testuMyStaticClass.staticCall()
i(new MyInstanceClass()).instanceCall()
i wszyscy ich zależnościami, które się nazywa. I odwrotnie, poprzez zastosowanie niefinałowych klas z niekończącymi się metodami (lub jeszcze lepiej - interfejsami), wstrzykiwane instancjeFoo
iBarFactory
testy jednostkowe sąMyClass
możliwe do napisania przez ułatwienie kpiny.źródło