Entendendo a teoria do DIP, DI, IoC

5

Por cerca de dois meses, tenho lido tudo o que posso encontrar para esses três tópicos e ainda não tenho certeza se comprei.

  1. Princípio de Inversão de Dependência . Significa que você deve sempre confiar apenas em interfaces e não em suas implementações. Se sua classe depende de qualquer outra classe, isso é ruim, porque depende dos detalhes da segunda classe. Se sua classe depende da interface, tudo bem, já que esse tipo de dependência significa apenas que sua classe precisa de algo abstrato que possa fazer algo específico e que você não se importe com isso.

    Como P em "DIP" significa "Princípio", provavelmente eu deveria defini-lo desta maneira: Princípio de Inversão de Dependência é um princípio que exige que todas as entidades do seu código dependam apenas de detalhes realmente precisa .

    Por "detalhes que eles realmente precisam" quero dizer interfaces para o caso mais simples. Também usei a palavra "entidades" para enfatizar que o DIP também é aplicável a procedimentos e qualquer outra coisa, não apenas a classes.

  2. Injeção de Dependência . É aplicável apenas a entidades ativadas por DI. Entidade habilitada por DI é uma entidade que é "aberta" para configurar seu comportamento sem alterar seus componentes internos. Existem 2 tipos básicos de injeção (quando se fala de classes):

    • Injeção de Construtor - é quando você passa todos os "detalhes abstratos" necessários para o objeto apenas no momento em que está prestes a ser construído.
    • Setter Injection - é quando você "esclarece" os aspectos necessários depois que o objeto já foi criado.

    Assim, a definição é provavelmente a seguinte: Injeção de Dependência é um processo de passar os "detalhes abstratos" para a entidade que realmente precisa desses detalhes .

    Por "realmente precisa desses detalhes" quero dizer interfaces para o caso mais simples. A palavra "entidades" é, como sempre, usada para enfatizar que DI também é aplicável a procedimentos e qualquer outra coisa.

  3. Inversão de Controle. É frequentemente definida como "diferença entre bibliotecas e frameworks", como "programas de escrita de qualquer forma que você fez em programação procedural" e assim por diante. Isso é o mais confuso para mim. Eu acredito que a ideia principal aqui é apenas iniciar qualquer ação. Ou você faz algo "sempre que quiser" (forma procedural), ou "espera" até que alguém lhe pergunte (maneira IoC).

    Minha definição é: O IoC é uma propriedade do fluxo de execução do seu programa, quando você não faz nada até que eles peçam para você fazer .

    Soa exatamente como "Princípio de Hollywood", mas acredito que "Princípio de Hollywood" e IoC são ambos absolutamente a mesma idéia.

Eu entendo isso?

    
por Andrey Agibalov 20.07.2011 / 21:15
fonte

1 resposta

5

Se você olhar para suas três definições, a distinção é sutil, mas elas essencialmente significam a mesma coisa.

O que tudo isso significa é fornecer o que a classe precisa (suas dependências) através de parâmetros em seu construtor. Isso é tudo. Existem inúmeras estruturas de injeção de dependência que procuram formalizar esse processo, mas todas elas equivalem à mesma coisa.

A Injeção de Dependência sempre procura fornecer apenas as dependências necessárias, quando elas são necessárias.

    
por 20.07.2011 / 21:26
fonte