El Blog de Trespams

Blog personal sobre tecnologia, gestió de projectes i coses que se me passen pel cap

IoC

Aquests dies estat llegint damunt un patró de disseny anomenat Inversió del Control o com l'ha rebatejat Martin Fowler injecció de dependència.

Fowler diu al seu article Inversion of Control Containers and the Dependency Injection pattern que el terme d'inversió de control està mal triat i que la moda dels bastiments de dir que implementen IoC és una obvietat.

Anant d'enllaç a enllat he trobat també altres articles interessants:

De tot això n'he tret una idea del que és el patró i quan es pot fer servir. No he arribat encara a cap implementació concreta o com integrar-la amb els meus propis desenvolupaments, encara que pel que he estat llegint tant Hivemind com Spring són bons candidats, l'elecció d'un o l'altra dependria de l'arquitectura utilitzada en el projecte i de com es de bona la integració de cada bastiment amb aquesta tecnologia.

Tal com jo ho veig si feim projectes de codi obert trobarem que en molts de casos aquest patró no té massa avantatges damunt un patró Factory, un bon ús de les interfícies i una bona documentació. Té molt de sentit si el que volem és crear una aplicatiu que agafa components de tercers i/o volem crear una aplicació extensible mitjançant pluggins.

Així el concepte de IoC aniria un pas més enllà dels pluggins i de patró Factory, es tracta de que la decisió de com s'implementa una caractarística no la controli directament l'aplicació sinó que es controli en temps d'execució. Això és el que fa, per exemple, Hibernate quan et deixa triar el sistema de caché que vols fer servir tan sols canviant els paràmetres de configuració de l'xml. L'Hivemind o Spring pel que veig segueixen la línea de fer servir arxius de configuració en xml on s'enllacen els serveis i la seva implementació. El PicoContainer fa l'enllaç per codi i per mi perd un poc la gràcia i l'esperit del patró.

Amb les aplicacions que he estat fent darrerament se me n'acud un possible ús d'aqeust patró:

Suposem una aplicació típica on l'usuari s'ha d'autentificar per poden entrar. L'aplicació passa el nom de l'usuari, la clau i el sistema d'autentificació ens diu si l'usuari és vàlid i retorna un conjunt d'informació damunt dit usuari. Aquest sistema d'autentificació és un ferme cantidat a figurar en els arixus de un contenidor d'Injecció de dependència, ja que per exemple podem fer l'autentificació fent servir LDAP, una Base de Dades, consultant a un arxiu de text o bé en les etapes inicial de desenvolupament fent servir un objecte mock per a l'autentificació.

En el tema de l'autentificació existeix el risc que ens n'anodem que hem deixat codificat el sistema d'autentificació incorrecte per l'entorn de producció. Si tenim l'autentificació implementada com a servei bastaria canviar el mapeig del servei i l'aplicatiu estaria ja llest per funcionar.

blog comments powered by Disqus