Em um projeto, estou fazendo o seguinte:
Uso o pattern repository para acessar meus objetos de negócio. Os repositorios são definidos por interfaces, e eu tenho um factory para instancia-los.
No cliente, configuro o factory para instanciar os repositorios dinamicamente usando proxies. Implemento os proxies de forma a empacotar a chamada (isto é: qual interface está sendo usada, nome do método chamado e argumentos) e enviar tudo para um servlet.
No servidor, o servlet decodifica a chamada, usa o factory para obter uma implementação concreta do repositorio, chama o método via reflexão e empacota o resultado (ou alguma exceção que tenha sido lançada pelo método) e retorna para o cliente. O cliente decodifica isso e retorna a chamada.
Ficou bem simples de usar, e bem transparente.
E com a vantagem de que se o cliente precisar apenas de acesso local, pra uma única estação, eu posso configurar o factory no cliente de forma a instanciar as implementações reais ao invés dos proxies, e o resto do sistema continuaria funcionando da mesma forma…
Mas devido à minha inexperiencia, posso estar esquecendo algum detalhe que irá me causar uma boa dor de cabeça no futuro, ou talvez haja uma forma mais simples de implementar essa comunicação…
Comentarios…?