Anche se non ho mai distribuito nulla con Smalltalk, il mio breve periodo di gioco ha sicuramente lasciato il segno. L'unico modo per descrivere l'esperienza è MVC come doveva essere. In sostanza, tutto il lavoro pesante per la tua applicazione viene eseguito negli oggetti business (o nel modello di dominio se sei così incline). I controlli standard sono in qualche modo associati agli oggetti business. Ad esempio, una casella di testo è mappata sul campo di un oggetto (il campo stesso è un oggetto, quindi è facile da fare). Un pulsante verrebbe associato a un metodo. Tutto questo è fatto con un'API molto semplice e naturale. Non dobbiamo pensare a oggetti vincolanti, ecc. Funziona e basta.
Eppure, in molte lingue e API più recenti sei costretto a pensare dall'esterno. Prima con C ++ e MFC, e ora con C # e WPF, Microsoft ha ottenuto che il suo mondo di sviluppatori è collegato ai costruttori di GUI dove costruisci la tua applicazione implementando i gestori di eventi . Lo sviluppo di Java Swing non è così diverso, solo tu stai scrivendo il codice per creare un'istanza dei controlli sul modulo. Per alcuni progetti, potrebbe non esserci nemmeno un modello di dominio, ma solo i gestori di eventi. Sono stato dentro e intorno a questo modello per la maggior parte della mia carriera.
Ogni modo ti costringe a pensare diversamente. Con l'approccio Smalltalk, il tuo dominio è intelligente mentre la tua GUI è stupida. Con l'approccio predefinito di VisualStudio, la tua GUI è intelligente mentre il tuo modello di dominio (se esiste) è piuttosto anemico.
Molti sviluppatori con cui lavoro vedono il valore nell'approccio Smalltalk e provano a inserirsi in quell'approccio nell'ambiente VisualStudio. WPF ha alcune caratteristiche di rilegatura dinamica che lo rendono possibile; ma ci sono delle limitazioni. Inevitabilmente parte del codice che appartiene al modello di dominio finisce nelle classi GUI.
Quindi, in che modo progetti / sviluppi il tuo codice? Perché?
- Prima la GUI. L'interazione dell'utente è fondamentale.
- Prima il dominio. Devo assicurarmi che il sistema sia corretto prima di inserire un'interfaccia utente.
Ci sono pro e contro per entrambi gli approcci. Il modello di dominio si adatta lì con cattedrali di cristallo e torta nel cielo. La GUI si inserisce in modo rapido e sporco (a volte davvero sporco).
E per un ulteriore bonus: come assicurarti che il codice sia mantenibile?