Bien que je n'aie jamais rien livré en utilisant Smalltalk, mon bref temps à jouer avec lui a définitivement laissé sa marque. La seule façon de décrire l'expérience est MVC telle qu'elle était censée être. Essentiellement, tout le gros du travail pour votre application se fait dans les objets métier (ou le modèle de domaine si vous êtes si enclin). Les contrôles standard sont liés aux objets métier d'une manière ou d'une autre. Par exemple, une zone de texte est mappée au champ d'un objet (le champ lui-même est un objet, donc c'est facile à faire). Un bouton serait mappé à une méthode. Tout cela se fait avec une API très simple et naturelle. Nous n'avons pas à penser à lier des objets, etc. Cela fonctionne simplement.
Pourtant, dans de nombreux langages et API plus récents, vous êtes obligé de penser de l'extérieur. D'abord avec C ++ et MFC, et maintenant avec C # et WPF, Microsoft a accroché son monde de développeurs aux constructeurs d'interfaces graphiques où vous créez votre application en implémentant des gestionnaires d'événements . Le développement Java Swing n'est pas si différent, seulement vous écrivez le code pour instancier vous-même les contrôles du formulaire. Pour certains projets, il peut même ne jamais y avoir de modèle de domaine - juste des gestionnaires d'événements. J'ai été dans et autour de ce modèle pendant la majeure partie de ma carrière.
Chaque façon vous oblige à penser différemment. Avec l'approche Smalltalk, votre domaine est intelligent tandis que votre interface graphique est stupide. Avec l'approche VisualStudio par défaut, votre interface graphique est intelligente tandis que votre modèle de domaine (s'il existe) est plutôt anémique.
De nombreux développeurs avec lesquels je travaille voient de la valeur dans l'approche Smalltalk et tentent d'intégrer cette approche dans l'environnement VisualStudio. WPF a quelques fonctionnalités de liaison dynamique qui le rendent possible; mais il y a des limites. Inévitablement, du code appartenant au modèle de domaine se retrouve dans les classes GUI.
Alors, comment concevez-vous / développez-vous votre code? Pourquoi?
- GUI d'abord. L'interaction avec l'utilisateur est primordiale.
- Domaine d'abord. Je dois m'assurer que le système est correct avant de mettre une interface utilisateur dessus.
Il y a des avantages et des inconvénients pour l'une ou l'autre approche. Le modèle de domaine s'y adapte avec des cathédrales de cristal et une tarte dans le ciel. GUI s'intègre là avec rapide et sale (parfois vraiment sale).
Et pour un bonus supplémentaire: comment vous assurez-vous que le code est maintenable?