ServiceLocator alguem conhece?

ola pessoal,

alguem poderia mes explicar como funciona este pattern?

Onde eu trabalho, o sistema pussuia uma fachada q instanciava os BOs(negocios) para serem utilizados pela interface, acontece q de um tempo pra cá, notou-se q a fachada estava ficando muito grande e com um construtor gigantesco (devido a qt de BOs). O pessoal entaum axou melhor trocar o pattern façade pelo ServiceLocator. Estamos usando spring aqui, como funcionaria o sistema entaum agora sem façade?

O sistema estava com estas camadas:

*interface
*serviceImplBO
*Façade
*BO
*DAO

E depois ficou assim: (O services chamam os BOs diretos agora, sem uso de façade)

*interface
*serviceImplBO

*BO
*DAO

Como o nome indica ServiceLocator é um localizador de serviços.

Serviços, entende-se aqui como um tipo de objecto de que não conhecemos a implmentação. Essa implementação terá que ser procurada, mas procurá-la cada vez que precisamos do serviço é um saco. Então colocamos o codigo de procura dentro de outro objeto, o ServiceLocator e usamos ele em vez.

O Service locator normalmente tem algum tipo de memoria do objecto localizado para que não seja necessário localiz´-lo a todo o momento, mas isso não é obrigatório e em certos casos não é sequer conveniente.

Este padrão era muito usado com o EJB 2.1 e anteriores, que obrigavam a usar as interaces home para pegar os objectos. Mas para pegar as interfaces era necessário passar pelo JNDI, o que era um tanto chato.

Fora do JNDI e do EJB o service locator tem um papel igual so muda a implementação.

O servicelocator não tem nada a ver com o façade. O Façade serve para diminuir o numero de paramentros e retorno de um certa operação e/ou para limitar o uso de camadas abaixo. O servicelocator serve apenas para localizar objectos.

Usado IOC a localização é feita pelo ppr container, mas se isso não for posisvel ou desejavel o padrão ainda se mantem (aliás o IOC é um servicelocator na medida que ele localiza as implementações certas para serem atribuidas nos luares certos.)