Domanda

Non sviluppo troppe applicazioni desktop / Windows Form, ma mi è venuto in mente che potrebbero esserci dei vantaggi nell'utilizzare il modello MVC (Model View Controller) per lo sviluppo di Windows Forms .NET.

Qualcuno ha implementato MVC in Windows Forms? In tal caso, hai qualche consiglio sul design?

È stato utile?

Soluzione

Quello che ho fatto in passato è usare qualcosa di simile, Model-View-Presenter .

[NOTA: questo articolo era disponibile sul Web. Per vederlo ora, devi scaricare CHM, quindi visualizzare le proprietà del file e fare clic su Sblocca. Quindi è possibile aprire il CHM e trovare l'articolo. Grazie mille, Microsoft! sospirare ]

Il modulo è la vista e ho un'interfaccia IView per esso. Tutta l'elaborazione avviene nel presentatore, che è solo una classe. Il modulo crea un nuovo relatore e si passa come IView del relatore. In questo modo per il test puoi invece passare un IView falso, quindi inviargli comandi dal presentatore e rilevare i risultati.

Se dovessi usare un Model-View-Controller completo, immagino che lo farei in questo modo:

  • Il modulo è la vista . Invia comandi al modello, genera eventi a cui il controller può abbonarsi e si iscrive agli eventi dal modello.
  • Il controller è una classe che si iscrive agli eventi della vista e invia comandi alla vista e al modello.
  • Il modello genera eventi a cui la vista è abbonata.

Ciò si adatterebbe con il classico diagramma MVC . Il più grande svantaggio è che con gli eventi, può essere difficile dire chi si iscrive a cosa. Il modello MVP utilizza metodi anziché eventi (almeno nel modo in cui l'ho implementato). Quando il modulo / vista genera un evento (ad esempio someButton.Click), il modulo chiama semplicemente un metodo sul presentatore per eseguire la logica per esso. La vista e il modello non hanno alcuna connessione diretta; entrambi devono passare attraverso il presentatore.

Altri suggerimenti

Bene, in realtà Windows Form implementa un " stile libero " versione di MVC, proprio come alcuni film implementano un po 'di "stile libero" schifoso interpretazione di alcuni libri classici (mi viene in mente Romeo & amp; Juliet).

Non sto dicendo che l'implementazione di Windows Form sia sbagliata, è solo ... diversa.

Se usi Windows Form e le tecniche OOP appropriate, e forse un ORM come EntitySpaces per l'accesso al tuo database, potresti dire che:

  1. L'infrastruttura ORM / OOP è il modello
  2. I moduli sono le visualizzazioni
  3. I gestori di eventi sono il Controller

Sebbene avere sia View che Controller rappresentati dallo stesso oggetto rendano più difficile la separazione del codice dalla rappresentazione (non esiste un modo semplice per collegare una vista " GTK + " in una classe derivata da Microsoft.Windows.Forms.Form) .

Cosa puoi fare se stai abbastanza attento. È mantenere il codice del modulo completamente separato dal codice del controller / modello scrivendo solo elementi relativi alla GUI nei gestori di eventi e tutte le altre logiche aziendali in una classe separata. In tal caso, se mai volessi usare GTK + per scrivere un altro livello di visualizzazione, dovrai solo riscrivere il codice GUI.

Windows Forms non è progettato da zero per utilizzare MVC. Hai due opzioni.

Innanzitutto, puoi implementare la tua implementazione di MVC.
In secondo luogo, è possibile utilizzare un framework MVC progettato per Windows Form.

Il primo è semplice da iniziare, ma più ci si avvicina, più è complesso. Suggerirei di cercare un framework MVC valido, preesistente e ben collaudato, progettato per funzionare con Windows Forms. Credo questo post sul blog è un buon punto di partenza.

Per chiunque abbia iniziato, suggerirei di saltare Windows Form e sviluppare contro WPF, se ne hai la possibilità. È un framework molto migliore per la creazione dell'interfaccia utente. Esistono molti framework MVC in fase di sviluppo per WPF, tra cui questo e quello .

Secondo Microsoft, l'UIP Application Block menzionato da @jasonbunting è "archiviato". Guarda invece il Smart Client Application Block o anche il più recente < a href = "http://msdn.microsoft.com/en-us/library/aa480482.aspx" rel = "nofollow noreferrer"> Smart Client Software Factory , che supporta sia WinForms che WPF SmartParts.

Controlla Blocco applicazione processo interfaccia utente (UIP) . Non ne so molto ma l'ho guardato qualche anno fa. Potrebbero esserci versioni più recenti, controlla in giro.

" UIP Application Block si basa sul modello modello-view-controller (MVC). "

Dai un'occhiata al blocco applicativo Smart Client MS Patterns and Practices che contiene alcune indicazioni e classi che ti guidano attraverso l'implementazione di un modello di presentatore di visualizzazione modello in moduli Windows - dai un'occhiata all'applicazione di riferimento inclusa.

Per WPF questo è stato sostituito dal prisma progetto

L'approccio alle fabbriche di software è un ottimo modo per apprendere le migliori pratiche

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top