Estrazione della logica di dominio dai moduli a cui sono accoppiati?

1

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.

    
posta Mario T. Lanza 15.05.2013 - 20:45
fonte

1 risposta

1

Ci sono una varietà di modelli di presentazione il cui ruolo esatto è quello di dividere l'interfaccia dal comportamento.

Dato che menzioni specificamente un ambiente Microsoft, ti consiglio di cercare MVVM (che è promosso con particolare riferimento a WPF) e MVC (che è promosso in ASP.NET). L'approccio MVC di Microsoft è un framework fisico basato strettamente sul pattern MVC generico: interrompe alcune astrazioni ma produce automaticamente il codice per te.

Un ulteriore approccio, promosso anche da Microsoft fino a quando non salta sul carro del WPF, è il pattern MVP.

In teoria tutti e tre questi modelli, essendo modelli, sono applicabili a qualsiasi piattaforma. MVVM è stato sicuramente sviluppato pensando a WPF e, come ho detto, l'implementazione di Microsoft di MVC devia dal "puro" un po '.

Ce ne sono di più, ma come ho detto sono tutti rivolti in senso ampio a estrarre la logica dal livello dell'interfaccia utente. Il sito web di Martin Fowler è un riferimento decente qui.

    
risposta data 15.05.2013 - 21:21
fonte