Durante o processo de desenvolvimento de software existe sempre um interacao na estrutura e ate mesmo na arquitetura isso e um desafio para manter o minimo de acoplamento possivel da aplicacao. Uma forma de diminuir o acoplamento, e utilizar o principio da inversao de dependencia. Existem varias formas de se aplicar o principio, uma delas e utilizando o ninject um projeto muito simples que utiliza dois ORMs em uma unica aplicacao ou e possivel decidir qual deles deve ser utilizado, muito legal, este design patterns e conhecido como persistencia plugavel entao vamos ao projeto: Este projeto utiliza tanto o NHibernate como o EntityFramework 4.1 este e um projeto atualizado do Imasters, (ele utilizava o EntityFramework 4.0 entao mudei para o 4.1 que e muito melhor), tive que mexer para ver como funciona. Voce pode baixa-lo no link, bem o basico e mostrado abaixo. O diagrama mostra a estrutura da do projeto Core onde nao existe nenhuma relacao entre as persistencias, para se utilizar dos metodos do repositorio se instancia a interface e nao a classe que implementa a interface isso e realizado pelo ninject. Abaixo vemos o construtor da Classe fabrica: public Fabrica() { // Nesse ponto definimos qual modulo de persistencia //sera utilizado. // USAR NHIBERNATE var persistencia = new ModuloNHibernate(); // USAR ENTITY //var persistencia = new ModuloEF4(); this.Kernel = new StandardKernel(persistencia); } Veja que a variavel persistencia retorna uma instancia tanto do NHibernate como do EntityFramework , este projeto e bem basico e pode ser muito bem incrementado para utilizar os ORM dinamicamente pois cada um existem suas particularidades.Valeu galera. Definir uma dependencia um-para-muitos entre objetos, de modo que quando um mudancas de estado do objeto,todos os seus dependentes sao notificados e atualizados automaticamente. Observer baseia-se em uma relacao entre um sujeito e seus observadores, de modo que as mudancas de estado sao comunicadas.Observer consiste em tres partes:- A interface Observer define o metodo update() que e chamado quando o estado muda;- Os metodos da classe Assunto definido para registro e cancelamento de registro de observadores (por exemplo, attach() e detach()) e apela a mudancas de estado do update() metodos no Observer registrados;- Temas especificos sao derivados do assunto e relatar mudancas sua condicao sobre a atualizacao;- Observadores implementam a interface Observer regista-se com os assuntos necessarios e ser informado de update() sobre as mudancas de estado dos assuntos.Bem um exemplo de implementacao do observer para uma navegacao em javaScript com eventos: create, edit e delete pode ser baixado no link, tambem sua visualizacao esta disponivel no link.Basicamente o codigo gira em torno de tres classes que e mostrada abaixo;Interface do observer ela estabelece o contrato de implementacao:* Interface that establishes a contract observer * * $author Alexis Moura * $var Interface */ var InterfaceObserver = { // Observer Observer: function() { this.update = function(o) { throw new Error('Implemente Observer.update()'); }; }, // Subject Subject: function() { var observers = {}; this.add_observer = function(o) { observers[o] = o }; this.rem_observer = function(o) { delete observers[o] }; this.notify = function() { for (var x in observers) { observers[x].update(this); } }