2013-06-05 10 views

risposta

12

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 
3

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.

+2

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

+2

@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! –

12

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.

+2

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 .. –

+3

@denismorozov O tenerli separati, e usare ILmerge/etc per consolidare in seguito nel rilascio: http: // research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx –

+0

non ci ha pensato, ottimo commento, grazie! –

2

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.

4

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 
2

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.

Livello

Cliente:

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.

Problemi correlati