njeção de dependência para programação processu
Suponha que eu decidi escrever um aplicativo grande em C ou qualquer outra linguagem de programação processual. Possui funções com dependências de chamada que se parecem com isso:
A
|
+-------------+
| |
B1 B2
| |
+------+ +------+
| | | |
C11 C12 C21 C22
Obviamente, o teste unitário das funções de folhas C11, C12, C21 e C22 é muito fácil: configure as entradas, chame as funções, afirme as saída
Mas qual é a estratégia adequada para permitir um bom teste de unidade para B1, B2 e A?
SeriaInjeção de dependênci sugere queB1
(eB2
também) ser declarado como segue?
// Declare B1 with dependency injection for invoking C11 and C12.
int B1(int input, int (*c11)(int), int(*c12)(int));
Mas essa estratégia não parece escalável se eu tiver muitas camadas de chamadas. Imagine o que a declaração paraA
pareceria
int A(int input, int (*b1)(int, int (*)(int), int(*)(int)),
int(*b2)(int, int (*)(int), int(*)(int)),
int (*c11)(int),
int (*c12)(int),
int (*c21)(int),
int (*c22)(int));
Que nojo! Tem que haver uma maneira melhor.
s vezes, sinto que o DI e outros padrões semelhantes que pretendem promover a modularidade e a facilidade de manutenção realmente dificultam a clareza do código e complicam o que deveria ser uma codificação direta em abstrações sem sentido e indiretas complicada
Como os grandes projetos de software em C, como Perl e Ruby, lidam com testes de unidad