Come scegliere di NON utilizzare un framework (Caliburn.Micro, ecc.) in una determinata applicazione MVVM?

25

Una volta ho avviato un progetto MVVM / WPF, che alla fine è stato creato e distribuito, e per questo ho studiato molto il Caliburn.Micro MVVM Framework. Il fatto è: ho finito con non usando Caliburn.Micro per questo, e ho finito per implementare alcuni concetti MVVM (in particolare, solo le classi ViewModelBase e RoutedCommand ).

Ora mi è stato assegnato un progetto un po 'più grande sulla stessa falsariga: una "applicazione desktop offline per client Rich per utente singolo", per così dire, e ho deciso di utilizzare Caliburn.Micro. Ed è qui che inizia il mio "problema".

Ho letto questo famoso post sul blog , il cui titolo dice che "Se stai usando MVVM allora hai bisogno di un framework", che:

"Trying to do something like MVVM without a framework is a huge amount of work. Tons of duplicate code, reinventing the wheel, and retraining people to think differently.

At least with a framework you avoid the duplicate code and hopefully don’t have to reinvent the wheel – allowing you to focus on retraining people. The retraining part is generally unavoidable, but a framework provides plumbing code and structure, making the process easier."

Sarei d'accordo sulla prima lettura ma la mia effettiva esperienza con Caliburn.Micro (CM) nella mia applicazione attuale è di ignoranza e disorientamento. Cioè, il quadro non ha reso il processo più semplice, anzi. Leggendo gli esempi sempre ripetitivi forniti da Rob Eisenberg nella documentazione piuttosto (troppo) informale e cercando di dedurre i modelli di utilizzo dai campioni forniti involontariamente e le loro relazioni di classe e interfaccia completamente indirette, in cui le cose sembrano essere progettate per funzionare basato sugli effetti collaterali, sembra umanamente impossibile a meno che tu non sia un genio stagionato (mi dispiace per lo sproloquio, ma immagino tu sappia cosa intendo).

Per non parlare del fatto che uno scenario sopra-banale sembra coinvolgere contenitori IoC, che è qualcosa con cui non ho mai lavorato, e che sembrano risolvere un problema che potrei non avere nemmeno . Non mi va di passare più ore di progetto a imparare quelle cose invece di pensare al mio problema e ai domini delle applicazioni. Volevo solo una banana, ma CM mi ha dato un gorilla (IoC) con un cestino di banane.

Ora sto pensando di tornare al mio framework MVVM homespun - composto solo da una manciata di classi specifiche MVVM che voglio realmente implementare - vorrei almeno dare a CM una possibilità, nel caso stia perdendo qualcosa qui, o semplicemente facendo le cose "nel modo sbagliato" per pura inesperienza e ignoranza. E quindi la domanda è:

There are widespread consensus that "frameworks make things easier and more natural", but if I happen to be experiencing quite the opposite, does this mean that I shouldn't use the framework, or that I am trying to learn it the wrong way? Is there a clue that I shouldn't even be using a framework in the first place? Or is there some "right" way to figure out how to use CM for simple MVVM development?

    
posta heltonbiker 19.06.2015 - 19:42
fonte

4 risposte

13

Ho provato CaliburnMicro e MVVMLight e quando uso Caliburn sento davvero quello che senti, sicuro che è davvero magico in grado di legare il controllo alla proprietà usando semplicemente Name="PropertyName" invece di old Text="{Bind PropertyName}" ma alla fine Caliburn va troppo in mare per fare questa cosa magica, quando qualcosa va storto è davvero difficile fare il debug, per peggiorare le cose hanno un sacco di modi per fare una cosa.

Ma quando si usa MVVMLight è sottile, quando lo si utilizza ci si rende conto che è quasi al 100% come MVVM Framework, con alcune funzioni sparse in esso.

So che questo non risponde alla tua domanda "Come NON usare framework" ma francamente non posso raccomandarti di seguire questa strada perché è solo sbagliato, penso anche che ti sei perso perché usi la struttura Full featured di usare prima uno semplice.

    
risposta data 20.06.2015 - 07:43
fonte
10

È importante capire cos'è MVVM. Non è un po 'di funzionalità condivisa che non è necessario reimplementare (analizzare un file JPEG o connettersi a un determinato server di database SQL), è un modello - un modello per come si può scegliere implementare una ricca GUI. Quindi, se la tua implementazione del pattern è semplice e diretta, non penso che tu abbia bisogno di provare vergogna nell'usarlo piuttosto che in un framework.

In effetti, credo che l'intera idea di schemi come quadri sia andata troppo oltre. Perché qualsiasi cosa sia un modello deve essere la forma generale di una classe di soluzioni. Poiché è così, ci si può aspettare che i pattern debbano essere adattati ai sistemi che li usano e non è possibile farlo se si tenta di utilizzare un modello adatto a una sola misura. Sarebbe molto più costruttivo lasciare l'implementazione del pattern al progettista dell'applicazione e fornire librerie che incapsulino funzionalità, piuttosto che architettura.

    
risposta data 19.06.2015 - 21:43
fonte
5

La mia prima esperienza con WPF è stata l'utilizzo di Caliburn.Micro, quindi probabilmente è molto diverso dalla maggior parte degli sviluppatori. Ho trovato sia WPF che Caliburn.Micro come una curva di apprendimento piuttosto ripida, proveniente da WinForms, tuttavia, dopo una certa esperienza con entrambi, ho trovato loro un piacere da usare in coppia. Attualmente lavorando in una diversa organizzazione in cui Caliburn.Micro non viene utilizzato, trovo che ci sia un sacco di codice idraulico duplicato che rende la base di codice abbastanza gonfia e inutilmente complessa.

Sono assolutamente d'accordo sul fatto che ci sono alcuni trucchi con Caliburn.Micro, che può complicare il debug, tuttavia, una volta sperimentato, è molto meno probabile che si tratti di un dolore. L'aumento della velocità di sviluppo, il codice più pulito e snello e il quadro generale che incoraggia MVVM migliori sono più che validi per me.

Caliburn.Micro inoltre non invalida il WPF di riserva: si basa solo su di esso, il che significa che puoi ancora utilizzare le funzionalità di WPF, se lo desideri, e usare Caliburn per pochi bit se lo desideri. Questo è simile al modo in cui TypeScript e JavaScript coesistono insieme nella mia mente.

Sicuramente userò Caliburn.Micro in qualsiasi nuovo progetto WPF su cui lavoro in futuro, se ne avessi la possibilità.

    
risposta data 26.09.2017 - 06:09
fonte
1

Per chi arriva qui per frustrazione con Caliburn.Micro, dai uno sguardo a questo quadro: Stylet

È ispirato a Caliburn.Micro, tranne che rimuove molta della magia che ti lascia disorientato su ciò che sta accadendo. Inoltre, la documentazione è scritta in un linguaggio molto più semplice senza pensare che tu voglia approfondire il gergo tecnico. Molto meglio per i principianti.

Inoltre, Stylet adotta un approccio ViewModel-First. Caliburn.Micro e molti altri framework adottano un approccio View-First, che presenta alcuni problemi scomodi. Se sei già molto bravo con i principi SOLID e il codice con motivi, è probabile che tu possa trovare un approccio ViewModel-First più naturale dal momento che assume la prospettiva che la tua logica dovrebbe guidare il sistema, non la vista.

    
risposta data 08.01.2019 - 03:15
fonte

Leggi altre domande sui tag