Com base na resposta de Christian, até onde sei, o termo costura se origina do livro de Feathers, Working Effective with Legacy Code . A definição está na página 31:
Uma costura é um local onde você pode alterar o comportamento do seu programa sem editar nesse local.
Para dar exemplos do que é e do que não é uma costura, considere o seguinte código Java:
public class MyClass {
private final Foo foo;
public MyClass(Foo foo) {
this.foo = foo;
}
public void doBunchOfStuff(BarFactory barFactory) {
// foo.doStuff() is a seam because I can inject a mock instance of Foo
this.foo.doStuff();
// barFactory.makeBars() is a seam because I can replace the default
// BarFactory instance with something else during testing
List<Bar> bars = barFactory.makeBars();
for(Bar bar : bars) {
// bar.cut() is also a seam because if I can mock out BarFactory, then
// I can get the mocked BarFactory to return mocked Bars.
bar.cut();
}
// MyStaticClass.staticCall() is not a seam because I cannot replace
// staticCall() with different behavior without calling a class besides
// MyStaticClass, or changing the code in MyStaticClass.
MyStaticClass.staticCall();
// This is not a seam either because I can't change the behavior of what
// happens when instanceCall() occurs with out changing this method or
// the code in instanceCall().
(new MyInstanceClass()).instanceCall();
}
}
As costuras exemplificadas acima seriam costuras, a menos que:
- A aula que está sendo injetada é final.
- O método que está sendo chamado é final.
Basicamente, as costuras facilitam o teste de unidade. Não consigo escrever um teste de unidade MyClassdevido às chamadas para MyStaticClass.staticCall()e (new MyInstanceClass()).instanceCall(). Qualquer teste de unidade para MyClass's doBunchOfStuff()método teria de teste MyStaticClass.staticCall()e (new MyInstanceClass()).instanceCall()e tudo de suas dependências que são chamados. Por outro lado, usando classes não finais com métodos não finais (ou melhor ainda - interfaces), as instâncias injetadas Fooe BarFactorytornam MyClasspossíveis testes de unidade para escrever, facilitando a zombaria.