Molte applicazioni non fanno nulla per separare l'interfaccia dalla logica del dominio. Ho programmato per un paio di decenni e ho lavorato in più di una dozzina di negozi e nessuno di loro ha preso alcuna misura per separare l'interfaccia dalla logica del dominio. Cioè, stanno tutti utilizzando il modello Visualizzazione autonoma . Ciò contrasta con tutta la saggezza che ho letto sulla separazione delle preoccupazioni. Quando l'utente deve scegliere un elemento da un insieme di elementi, tale selezione è direttamente legata a una casella combinata anziché a un'astrazione.
Un enorme inconveniente di tutto questo accoppiamento è che rende impossibile scrivere test unitari. Per eseguire qualsiasi unit test l'applicazione nella sua interezza deve essere prima caricata. Nella mia mente, il caso d'uso dovrebbe essere incapsulato all'interno di un'astrazione che può in seguito avere un database e un'interfaccia collegata ad esso. Questo tipo di separazione renderebbe banali i test unitari di implementazione per confronto.
Dato che il negozio medio ha la sua interfaccia e la logica del dominio strettamente accoppiate, come si fa il refactoring alla separazione? Cioè, una completa riscrittura è fuori dal tavolo. Quello di cui sto parlando sta portando una proposta alla direzione su come realizzare la creazione di oggetti di dominio (qualunque sia il loro aspetto) che vivono isolati dal database e dall'interfaccia. In altre parole, sarebbe utile essere in grado di spiegare come questo concetto di presentare all'utente una scelta (qualcosa che è ora rappresentato dalle combo sulle forme) e di vedere come alcuni metodologia / quadro / modello rappresenti quello in senso astratto e in che modo tale astrazione viene quindi collegata all'interfaccia. Ciò renderebbe la sostituzione di combo con listbox nient'altro che un piccolo dettaglio.
Quali sono alcuni buoni modi per estrarre le astrazioni (casi d'uso del dominio) dai moduli? Qualche buona risorsa online? Il mio attuale negozio è su .NET, anche se sono interessato a idee da qualsiasi piattaforma di sviluppo. In definitiva, quello che devo fornire è un esempio concreto (codice) di come ciò potrebbe essere realizzato.