Estou construindo uma Facade para minha camada superior mas o retorno de alguns métodos retornando objetos um tanto complexos que pertencem ao subsistema que é a camada inferior, qual a melhor alternativa para manter a ligação fraca entre as camadas?
Coloque algum codigo como exemplo do que está falando para termos uma ideia do que vc chamada de “objetos complexos”.
Facade:
class Aplication {
//...
public Obj getExpectedObj();
//...
}
class Obj {
//...
public String getName() {}
public String getPivateKey() {}
public AppObj getSpecialObjUntilOnlyInAppLayer() {} //este metodo so seria util dentro da camada de aplicacao
public void setName() {}
public void setSpecialObj(AppObj ss) {}
//...
}
Criar uma interface ate agora pareceu a melhor opcao.
Tem alguma coisa estranha ai. Primeiro seu façade não recebe argumentos, isso é muito suspeito.
Segundo parece que vc está usando um objeto para encapsular outro. Isto não parece necessário. Retorne o AppObj e pronto.
Realmente até agora não tinha visto nenhum método de um facade receber um parâmetro, mas existem operações de modificação que a camada superior deve ter acesso e para realizar as modificações preciso receber parâmetros do que dever ser incluído, atualizado ou excluído.