Il giorno 30 agosto 2011 12:37, Gian Carlo P.
[email protected]ha scritto:
side effect si basa il TDD.
Il concetto base del DIP suggerisce di porre i dettagli di come persistere
i dati in un oggetto che incapsuli il comportamento e passarlo a quello pi
astratto che gestisce la logica. In questo modo logica e dettagli che si
trovano a livelli di astrazione differenti non sono dipendenti e tutto
risulta pi leggibile e mantenibile.
Hai pienamente ragione, nella spiegazione sono rimasto ad un livello pi
pragmatico, dai una letta a questo articolo:
Coming Soon – Alistair Cockburn.
Personalmente un modello che trovo illuminante, e non incompatibile
con
Rails, semplicemente Rails non ti limita alle best practices, ma
consente di
aggiungere debito tecnico alla tua applicazione in maniera quasi
schifosa
:).
No, non si tratta di Dependency Injection. Non c’ un risolutore delle
dipendenze, ma una semplice invocazione di metodo (new) .
La Dependency Injection prevede una figura che inserisca l’oggetto A
all’interno dell’oggetto B.
in Ruby, questo si traduce in:
class A
def do_a
# do something
end
end
class B
def initialize(a)
@a = a
end
def do_b
# do something with a
end
end
def build_everything
a = A.new
b = B.new(a)
{ :a => a, :b => b }
end
build_everthing[:b].do_b
Questo modo di fare per non comune in Ruby, perch tipicamente si fa (o
qualcosa di simile):
class B
def initialize
@a = A.new
end
end
E ovviamente, utilizzare i metodi ‘stub’ di RSpec o similari per testare
questo codice non implica implementare la DI, ma solo sfruttare le
potenzialit del linguaggio per semplificare lo sviluppo.
Tanto per chiarire le cose, fondamentale leggersi l’articolo di Martin
Fowler: Inversion of Control Containers and the Dependency Injection pattern.
Matteo