Questa è stata una mia costante irritazione, quindi ho pensato di chiedere dei suggerimenti. Come organizzi i tuoi modelli/viste/ViewModels in WPF (Solution Explorer)? Non riesco mai a trovare una soluzione di cui sono felice, quindi mi chiedo se c'è qualcuno là fuori che ha.Come organizzi i tuoi Modelli/Viste/VisualizzaModelli in WPF
risposta
A parte il fatto che i modelli devono essere nel proprio assieme (progetto). Io tendo a mettere Visualizzazioni e ViewModels correlati insieme in una singola cartella, piuttosto che avere una cartella chiamata "Vista" e un altro chiamato "ViewModels"
Diciamo, per esempio:
Project MyApp.Model
|---> Models
Project MyApp.Client
|--> Orders
| |--> OrderCRUDView
| |--> OrderCRUDViewModel
| |--> OrderListView
| |--> OrderListViewModel
|--> Accounts
|--> AccountCRUDView
|--> AccountCRUDViewModel
|--> AccountListView
|--> AccountListViewModel
...etc
Li ho separati in diversi progetti e poi li ho interrotti. Fondamentalmente il progetto M, il progetto VM, e quindi la vista come progetto principale. Anche se alla fine V & VM è diventato più strettamente accoppiato.
Come organizzare i modelli/viste/ViewModels in WPF (Solution Explorer)?
In genere ho il modello in un progetto separato. Uno degli obiettivi principali di MVVM è di mantenere completamente il modello isolato da View e ViewModel.
La vista e il modello di visualizzazione dipendono - Il mio stile di organizzazione personale è diverso in base all'ambito del progetto.
Per progetti molto piccoli, ho spesso il View e il ViewModel per ciascuna "vista" affiancata.
Per i progetti più grandi, li separerò nei propri spazi dei nomi (e nelle cartelle) o anche in progetti separati. Avere il ViewModel in un progetto separato dalla vista è bello in quanto può far rispettare che ViewModel non fa riferimento a Visualizza elementi, in quanto è possibile lasciare interamente i riferimenti richiesti a tale progetto.
concordato/utilizzando lo stesso stile, solo il commento che volevo aggiungere era quando il numero di progetti inizia a crescere: inizia a pagare un pedaggio sul tempo di avvio dell'app in quanto ogni DLL deve essere caricata. Ho appena refactorizzato l'app su cui sto lavorando che aveva 12+ dll solo per UI layer in 3 e utilizzava la struttura logica delle sottocartelle .. –
@denismorozov O tenerli separati, e usare ILmerge/etc per consolidare in seguito nel rilascio: http: // research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx –
non ci ha pensato, ottimo commento, grazie! –
Sono un Persona 'Cartella soluzione' ...
Mantengo insieme una data V e una VM nello stesso assembly e inserisco tutti gli assembly V/VM in una 'Cartella della soluzione' creata da Visual Studio.
I modelli e le classi di utilità vengono isolati dal montaggio e inseriti in una "Cartella soluzioni".
E, naturalmente, c'è una cartella della soluzione denominata 'infrastrutture' che contiene le corde magiche e così via ...
cartelle soluzione sono una designazione logica. Non creano cartelle fisiche sul tuo disco.
In un'applicazione più grande si potrebbe desiderare di buttare cose in assiemi separati, ma penso che funzionerebbe altrettanto bene.
Project MyApp
|--> Views
| |--> AccountsView
| |--> OrderView
|--> Sources
|--> CustomerData
|--> Data
| |--> DataAccess.cs <-- Provides database search helper methods that return ObservableColleections of "Model" data types for use in the ViewModels.
|--> Models
| |--> Account.cs
| |--> Order.cs
|--> ViewModels <-- Having more then one viewmodel for the same data is possible, e.g. Master-Detail scenarios.
|--> AccountsViewModel.cs
|--> OrderViewModel.cs
Questa è stata la mia partenza configurazione di base per i progetti non banali per quasi un decennio e la sua semplicità mi ha servito bene. La terribile pratica di mantenere le viste e i modelli di visualizzazione nello stesso progetto sembra essere una cosa da prisma, ma la comunità MVVM ha sparato quell'anti-modello un decennio fa.
LivelloCliente:
ProjectName.Client.csproj
--Assets
--Images
--Brushes
--DataTemplates
--Styles
--Controls
--Helpers
--Views
ProjectName.Client.ViewModel.csproj
--ModelViews
--ViewModels
--Helpers
Server Livello:
ProjectName.Server.Services.csproj
ProjectName.Data.csproj
ProjectName.Model.csproj
Lo strato di vista del modello non fa riferimento ad un progetto "Modello", come quello che esiste nel livello del server ed è esposto alla vista modello tramite un proxy del riferimento al servizio dati.
- 1. Come organizzi i tuoi file di risorse?
- 2. Come organizzi i tuoi moduli NInject?
- 3. come organizzi i tuoi lavori di programmazione
- 4. Come organizzi i tuoi file Backbone?
- 5. Come organizzi i tuoi bundle nei progetti Symfony2?
- 6. Come pagare i tuoi utenti non occidentali?
- 7. Come ricordi/gestisci i tuoi esempi SQL?
- 8. Come gestisci i tuoi gist su GitHub?
- 9. Come stai popolando/convalidando i tuoi ViewModels?
- 10. video Carica i tuoi amici in Android
- 11. Puoi definire i tuoi operatori in F #?
- 12. in Rails dove metti i tuoi Sweepers?
- 13. Come organizzi le tue piccole funzioni riutilizzabili?
- 14. Quali sono i tuoi sentimenti su JavaFX?
- 15. Caricare un'immagine con i tuoi amici
- 16. Crei i tuoi generatori di codice?
- 17. Come pagare i tuoi utenti? (alternative a PayPal)
- 18. Come gestire i messaggi WndProc in WPF?
- 19. Come utilizzare i controlli personalizzati in WPF
- 20. Come riutilizzare i layout in WPF
- 21. Come ordinare i gruppi in WPF
- 22. GitHub "I tuoi contributi" ei repertori di dati privati
- 23. C#, Ninject: dove inserisci il kernel e i tuoi moduli?
- 24. Quali sono i tuoi trucchi UITableView/UITableViewCell preferiti?
- 25. I tuoi pensieri sull'uso dei generatori di scaffali Rails
- 26. Quali sono i tuoi pensieri su Entity Framework 4.0?
- 27. Come proteggere e misurare i servizi Web che condividi con i tuoi partner commerciali?
- 28. Senza i join su Google App Engine, i tuoi dati devono esistere in un'unica grande tabella?
- 29. Dove prendi le foto per i tuoi disegni?
- 30. Come organizzi una soluzione Java in più progetti, come in Visual Studio?
Perché stai accoppiando strettamente Views e ViewModels? Da qui il commento di Reed su ** imporre ** MVVM attraverso la separazione del progetto. O per lo meno, utilizzare diversi spazi dei nomi per un effetto simile. – Heliac
@Heliac Mi rendo conto che sono passati 2 anni, ma hai assolutamente ragione. Alla fine ho dovuto disaccoppiarli davvero perché i requisiti per UX andavano alla deriva .. aver disaccoppiato V's era un vero toccasana! –