Estou iniciando um projeto de grupo escolar em Java, usando o Swing. É uma GUI simples no aplicativo de desktop do banco de dados.
O professor nos deu o código do projeto do ano passado para que pudéssemos ver como ele faz as coisas. Minha impressão inicial é que o código é muito mais complicado do que deveria ser, mas imagino que os programadores pensem isso frequentemente quando analisam o código que não escreveram apenas.
Espero encontrar razões pelas quais o sistema dele é bom ou ruim. (Perguntei ao professor e ele disse que veria mais tarde por que é melhor, o que não me satisfaz.)
Basicamente, para evitar qualquer acoplamento entre seus objetos persistentes, modelos (lógica de negócios) e visualizações, tudo é feito com seqüências de caracteres. Os objetos persistentes que são armazenados no banco de dados são hashtables de strings, e os modelos e visualizações "assinam" um ao outro, fornecendo chaves de string para os "eventos" nos quais eles assinam.
Quando um evento é acionado, a visualização ou modelo envia uma sequência para todos os assinantes que decidem o que fazer para esse evento. Por exemplo, em um dos métodos de ouvinte de ação de visualizações (acredito que isso apenas define o bicycleMakeField no objeto persistente):
else if(evt.getSource() == bicycleMakeField)
{
myRegistry.updateSubscribers("BicycleMake", bicycleMakeField.getText());
}
Essa chamada finalmente chega a esse método no modelo Veículo:
public void stateChangeRequest(String key, Object value) {
... bunch of else ifs ...
else
if (key.equals("BicycleMake") == true)
{
... do stuff ...
O professor diz que essa maneira de fazer as coisas é mais extensível e sustentável do que ter a visão simplesmente chamar um método em um objeto de lógica de negócios. Ele diz que não há acoplamento entre as visões e os modelos porque eles não sabem da existência um do outro.
Eu acho que esse é um tipo pior de acoplamento, porque a visão e o modelo precisam usar as mesmas strings para funcionar. Se você remover uma exibição ou modelo ou digitar um erro de seqüência de caracteres, não haverá erros de compilação. Também torna o código muito mais longo do que eu acho que precisa ser.
Quero discutir isso com ele, mas ele usa sua experiência no setor para combater qualquer argumento que eu, o estudante inexperiente, possa apresentar. Há alguma vantagem em sua abordagem que estou perdendo?
Para esclarecer, quero comparar a abordagem acima, com a visão obviamente acoplada ao modelo. Por exemplo, você pode passar o objeto de modelo do veículo para a visualização e, em seguida, para alterar a "marca" do veículo, faça o seguinte:
vehicle.make = bicycleMakeField.getText();
Isso reduziria 15 linhas de código atualmente usadas SOMENTE para definir a marca do veículo em um só lugar, para uma única linha de código legível. (E como esse tipo de operação é realizado centenas de vezes em todo o aplicativo, acho que seria uma grande vitória em termos de legibilidade e segurança.)
Atualizar
Meu líder de equipe e eu reestruturamos a estrutura da maneira que queríamos usando digitação estática, informamos o professor e acabamos dando uma demonstração a ele. Ele é generoso o suficiente para nos deixar usar nossa estrutura, desde que não peça ajuda a ele e se pudermos manter o resto de nossa equipe em dia - o que parece justo para nós.