Sto iniziando un progetto di gruppo scolastico in Java, usando Swing. È una GUI semplice sull'app desktop Database.
Il professore ci ha fornito il codice del progetto dell'anno scorso in modo da poter vedere come fa le cose. La mia impressione iniziale è che il codice sia molto più complicato di quanto dovrebbe essere, ma immagino che i programmatori lo pensino spesso quando guardano il codice che non hanno semplicemente scritto.
Spero di trovare ragioni per cui il suo sistema è buono o cattivo. (Ho chiesto al professore e ha detto che avrei visto in seguito perché è meglio, il che non mi soddisfa.)
Fondamentalmente, per evitare qualsiasi accoppiamento tra i suoi oggetti persistenti, i modelli (logica aziendale) e le viste, tutto viene fatto con le stringhe. Gli oggetti permanenti che vengono archiviati nel database sono hashtable di stringhe e i modelli e le viste "si iscrivono" tra loro, fornendo chiavi di stringa per gli "eventi" a cui si abbonano.
Quando viene attivato un evento, la vista o il modello invia una stringa a tutti i suoi abbonati che decidono cosa fare per quell'evento. Ad esempio, in uno dei metodi del listener di azioni per le viste (credo che questo imposti il bicycleMakeField sull'oggetto persistente):
else if(evt.getSource() == bicycleMakeField)
{
myRegistry.updateSubscribers("BicycleMake", bicycleMakeField.getText());
}
Quella chiamata alla fine arriva a questo metodo nel modello del veicolo:
public void stateChangeRequest(String key, Object value) {
... bunch of else ifs ...
else
if (key.equals("BicycleMake") == true)
{
... do stuff ...
Il professore afferma che questo modo di fare le cose è più estensibile e mantenibile che avere la vista semplicemente chiamare un metodo su un oggetto di logica aziendale. Dice che non c'è accoppiamento tra punti di vista e modelli perché non conoscono l'esistenza reciproca.
Penso che questo sia un tipo peggiore di accoppiamento, perché la vista e il modello devono usare le stesse stringhe per funzionare. Se rimuovi una vista o un modello o esegui un refuso in una stringa, non otterrai errori di compilazione. Inoltre, rende il codice molto più lungo di quanto penso debba essere.
Voglio discuterne con lui, ma usa la sua esperienza nel settore per contrastare qualsiasi argomento che io, lo studente inesperto, potrei fare. C'è qualche vantaggio nel suo approccio che mi manca?
Per chiarire, voglio confrontare l'approccio di cui sopra, con la vista ovviamente abbinata al modello. Ad esempio, è possibile passare l'oggetto modello del veicolo alla vista, quindi, per modificare la "marca" del veicolo, procedere come segue:
vehicle.make = bicycleMakeField.getText();
Ciò ridurrebbe 15 righe di codice che sono attualmente utilizzate SOLO per impostare la marca del veicolo in un unico posto, a una singola riga di codice leggibile. (E poiché questo tipo di operazione viene eseguita centinaia di volte in tutta l'app, penso che sarebbe una grande vittoria per la leggibilità e la sicurezza.)
Aggiornare
Il mio team leader e io abbiamo ristrutturato il framework nel modo in cui volevamo farlo utilizzando la digitazione statica, informato il professore e abbiamo finito per dargli una demo. È abbastanza generoso da permetterci di usare il nostro framework fintanto che non gli chiediamo aiuto e se possiamo mantenere il resto della nostra squadra al passo con i tempi, il che ci sembra giusto.