| Marco Abis |
Partial types
Salve a tutti,
'Metodologie' non è proprio il forum adatto ma visto che in passato questioni di design sono state poste qui lo faccio anche io. Ieri al workshop si è parlato di partial types (e ne avevo letto prima in giro per la rete) e la domanda che mi frulla per la testa da un po' di tempo (ancora senza risposta) è: i tipi parziali permetteono un migliore o un peggiore design? aprono nuovi scenari? Certo una volta compilato tutto il tipo è uno e cambia poco o nulla ma pensando al "code that speaks" qual'e' secondo voi l'impatto di questa nuova funzionalità? Grazie :) Marco Abis http://agilemovement.it - Italian Agile Movement http://www.agilityspi.com - Agility SPI :: Software Process Improvement |
| Alessandro Di Noia |
Re: Partial types
> Ieri al workshop si è parlato di partial types (e ne avevo letto prima in giro
> per la rete) e la domanda che mi frulla per la testa da un po' di tempo (ancora > senza risposta) è: i tipi parziali permetteono un migliore o un peggiore design? > aprono nuovi scenari? > Certo una volta compilato tutto il tipo è uno e cambia poco o nulla ma pensando > al "code that speaks" qual'e' secondo voi l'impatto di questa nuova > funzionalità? IMHO credo che nn si apra nessuno scenario al limite si risolvono problemi di ordine pratico, come ad esempio il controllo del codice (CVS). Dico ciò per esperienza diretta su un progetto seguito in passato che necessitava l'intervento congiunto di diversi sviluppatori su di una classe comune. Per il resto è come per tutte le cose del mondo: contengono sia del "bene" che del "male"; tutto dipende da chi le usa e soprattutto da COME le usa. Sicuramente ci saranno persone che divideranno anche ciò che nn andrebbe diviso creando una patchwork di file incomprensibile e difficile da gestire e ci saranno persone + avvedute o accorte che ne faranno un uso ragionato e profiquo. Tutto ciò, ovviamente, IMHO: passo la palla a qualcun'atro :D AlexD |
| Corrado Cavalli |
Re: Partial types
Ciao Marco,
Secondo me i partial types sconvolgeranno le metodologie di programmazione, non credo molto nel fatto che piu' sviluppatori possano sviluppare parti della stessa classe. Vedo semmai i partial types come la possibilita' di avere dei generatori di codice piu' evoluti i quali si possono prendere delle liberta' maggiori senza preoccuparsi di eventuali danni arrecati al codice scritto dallo sviluppatore. Corrado |
| Lawrence Oluyede |
Re: Partial types
Secondo me le partial classes vanno prese col contagocce (e con la lente di ingrandimento, non so se mi spiego). Non sono daccordo quando si parla di rivoluzione perchè a mio avviso sono un "workaround" per sopperire ai problemi dei generatori di codice (o comunque utili sono in quei contesti). Vediamo gli scenari:
- cvs: attualmente ci sono problemi nel gestire il cvs + un team che lavora sulla stessa classe, problemi che a mio avviso non verrebbero risolti con i tipi parziali per il semplice fatto che se (come il buon Murphy ci ha insegnato) qualcosa deve andare male andrà male anche con i tipi parziali, mi spiego: supponiamo che io e Pippo stiamo lavorando sulla stessa classe (continuo a domandarmi il perchè io e un'altra persona dovremmo lavorare sulla stessa classe ma facciamo finta di niente...); se qualcosa va storto è minata l'integrità di un solo file, cosa raddoppiata (o peggio ancora) nel caso dei tipi parziali. Dopotutto questo è un problema minore - ereditarietà e OOP: sarò un tradizionalista ma non vedo come i tipi parziali possano "fittare" (voce del verbo "to fit") nell'architettura OOP... ereditarietà? no perchè non eredito, riuso del codice? no perchè non mi sembra il caso di giocare ai Lego con un software... ammettiamo che io abbia misinterpretato il grande disegno dietro i tipi parziali e che siano realmente una rivoluzione... rivoluzione di cosa? Per evitare di usare il Facade? Mmm secondo me il problema va risolto a monte (vedi "workaround" come ho detto all'inizio) - generatori di codice: probabilmemte l'unico scopo per questa "rivoluzione", probabilmente tool come LLBGen, generatori di datalayer o chissà altro potranno beneficiarne :) - VS.NET, WindowsForms e altro: secondo me in quest'ottica sono più che un errore perchè scavalcano questioni come il pattern MVC ecc ecc; non ho avuto modo di vedere come VS generi il codice nei tipi parziali ma ho idea che potremmo finire ad avere una classe parziale "pentolone" dove sbattere tutto il codice che il programmatore non deve vedere. Molto meglio approcci come XUL, Glade, XAML (che se non erro usa i tipi parziali under the hood, ma non li espone all'utente) e quant'altro. Insomma tipi parziali? Si ma meno ce n'è meglio è. Sono favorevole per XAML e per i generatori di codice, un pò meno per Windows Forms e per l'esposizione diretta ai programmatori. Scusate il post polemico ma ho trovato solo questo modo per dire come la penso :) |
| Andrea Saltarello [UGIdotNET] |
Re: Partial types
> Ieri al workshop si è parlato di partial types (e ne avevo letto prima in giro
> per la rete) e la domanda che mi frulla per la testa da un po' di tempo (ancora > senza risposta) è: i tipi parziali permetteono un migliore o un peggiore design? > aprono nuovi scenari? Marco, secondo me i partial types non modificano nè il paradigma nè il design, poichè l'"atomo" rimane la classe. I partial types IMHO sono una manna quando le "parti" del tipo sono dichiarate/espresse utilizzando formalismi differenti, come capita già con i code-beside module di ASP .NET 2. Avalon e XAML sono un altro eccellente esempio. Ad oggi... Tutto qui, e non mi stupisce che i casi d'uso dei tipi parziali siano legati alle GUI, la cui defnizione trae particolare vantaggio dall'uso di una descrizione "dichiarativa" anzichè "programmatica". Vedremo se in futuro "spunteranno" altri ambiti nei quali si possano rivelare una "killer feature". Se son rose... :-) > Grazie :) prego :-) ciao, .A |
| Raffaele Rialdi |
Re: Partial types
> Ieri al workshop si è parlato di partial types (e ne avevo letto prima in giro
> per la rete) e la domanda che mi frulla per la testa da un po' di tempo (ancora > senza risposta) è: i tipi parziali permetteono un migliore o un peggiore design? > aprono nuovi scenari? E dopo qualche giorno di ferie eccomi :-) Credo prima di tutto che non stiamo parlando di nulla di nuovo. In fondo in C++ ci sono sempre stati anche se in modo un po' meno potente visto che è sempre necessario aggiungere la funzione prototipo nella definizione della classe. Premesso che la tendenza in programmazione va sempre più verso il tentativo di diminuire o eliminare il cosiddetto 'boilerplate' cioè il codice indispensabile ma ripetitivo e 'meccanicamente' ricostruibile. Premesso che per molti task gli strumenti di case sono fondamentali perchè risolvono a design time dei problemi che inficerebbero sulla performance al runtime. Detto questo, io sono molto favorevole ai partial types: - Codice come XAML o ASPX è *fondamentale* sia un partial type del code-behind e non una classe derivata (grosso beneficio in ottica OOP). Si al code beside e stop al code behind. - Su grosse classi (provato di persona con 200K di .cs) la gestione di una unica classe in vs.net è una palla al piede (questo è dovuto all'analisi che vs.net compie ad ogni keypress sul sorgente ed è inevitabile) - La gestione di più file appartenenti allo stesso 'type' è, come sempre, una questione di cervello da parte di chi ci mette le mani. Ci sono casi in cui modifiche possono essere apportate in tutta tranquillità, altri casi in cui è assolutamente deleterio. Dal punto di vista prettamente di design, concordo con Andrea che non cambi nulla se parliamo di classi che sono scritte interamente da noi. Ritengo invece che abbiamo dei grossi vantaggi laddove parte del codice sia stato prodotto da strumenti di case. L'estensione per derivazione di un dataset tipizzato limita sicuramente rispetto a quello che possiamo fare con i partial types. Il tutto condito con un bell'IMHO ;-) Raffaele |
| Marco Abis |
Re: Partial types
> IMHO credo che nn si apra nessuno scenario
mmmm a livello di design fa molta differenza poter "estendere" una classe senza derivarla anche senza considerare il fatto che ci si ritrova codice di una stessa entità sparso per n file. > al limite si risolvono problemi di ordine questo è un bene ma dipende anche da come vengono risolti (mi viene subito in mente il My di VB.NET ;-D) > Dico ciò per esperienza diretta su un progetto seguito in passato che necessitava > l'intervento congiunto di diversi sviluppatori su di una classe comune. quello che dici è chiaro ma bisognerebbe vedere il caso particolare. Solitamente è "solo" un problema di organizzazione e, spesso, di design del codice :-) > Sicuramente ci saranno persone che divideranno anche ciò che nn andrebbe diviso > creando una patchwork di file incomprensibile e difficile da gestire e ci saranno > persone + avvedute o accorte che ne faranno un uso ragionato e profiquo. concordo. IMHO non deve essere sempre il linguaggio/ambiente a forzare lo sviluppatore a NON fare certe cose ma questi sono punti di vista. Grazie per la risposta P.S.: che bello due reply e due visioni diametralmente opposte :-) Marco Abis http://agilemovement.it - Italian Agile Movement http://www.agilityspi.com - Agility SPI :: Software Process Improvement |
| Alessandro Di Noia |
Re: Partial types
> P.S.: che bello due reply e due visioni diametralmente opposte :-)
Non mi sembra di essere in disaccordo con Corrado, anzi mi sembra che sia la stessa visone in 2 ottiche diverse. Il mio post non voleva sottintendere che i partial types sono inutili: tutt'altro. Raffaele ha fatto notare un utilizzo di questa feat che io nn avevo considerato ma entrambi mi pare concordiamo sul fatto che siano una cosa utile....a patto di essere utilizzati con criterio. Per quel che riguarda la collaborazione di + utenti su una stessa classe, credimi che seppure in un team di appena 6 persone per risolvere la concorrenza degli aggiornamenti abbiamo dovuto ricorrere al pattern Facade che permettesse di splittare la classe in n sottoclassi: purtroppo era una classe attorno alla quale ruotava un po' tutto l'applicativo in sviluppo. Nonostante ciò si poteva lavorare un po' di + sull'architettura ed evitare di creare una classe del genere. In quel caso i partial types sarebbero stati utili ma nn indispensabili. In sostanza credo che le partial class innoveranno senza stravolgere il lavoro degli sviluppatori ma nn avranno un grande impatto sul resto. PS: Occhio che estendere una classe per me significa aggiungere nuove funzionalità lasciando intatta la classe base e quindi i partial types nn dovrebbero modificare questo aspetto; altrimenti addio retrocompatibilità. AlexD |
| Marco Abis |
Re: Partial types
> Non mi sembra di essere in disaccordo con Corrado, anzi mi sembra che sia la stessa
mi riferivo più che altro alle rispettive prime frasi: - "IMHO credo che nn si apra nessuno scenario al limite si risolvono problemi di ordine pratico" - "Secondo me i partial types sconvolgeranno le metodologie di programmazione" comunque credo di aver capito cosa intendi > Per quel che riguarda la collaborazione di + utenti su una stessa classe, credimi che seppure > in un team di appena 6 persone per risolvere la concorrenza degli aggiornamenti abbiamo dovuto > ricorrere al pattern Facade che permettesse di splittare la classe in n sottoclassi: purtroppo > era una classe attorno alla quale ruotava un po' tutto l'applicativo in sviluppo. lungi da me criticarvi, non ho neanche idea di cosa facesse l'applicativo :-) > In sostanza credo che le partial class innoveranno senza stravolgere il lavoro degli > sviluppatori ma nn avranno un grande impatto sul resto. ok, cercavo proprio questo: pareri > PS: Occhio che estendere una classe per me significa aggiungere nuove funzionalità lasciando > intatta la classe base e quindi i partial types nn dovrebbero modificare questo aspetto; > altrimenti addio retrocompatibilità. si, per questo avevo messo estendere tra virgolette. Grazie ancora e buona giornata Marco Abis http://agilemovement.it - Italian Agile Movement http://www.agilityspi.com - Agility SPI :: Software Process Improvement |
| Alessandro Di Noia |
Re: Partial types
Non ti preoccupare non mi sono assolutamente offeso, anzi sono molto contento che a volte si possa anche parlare di opinioni sulle novità che ci propongono....tanto + con persone di buona cultura (tecnica e non) e che sanno ascoltare ed accettare anche opinioni diverse dalle proprie.
La cosa + difficile è riuscire a far trasparire il proprio stato d'animo da una conversazione scritta e quindi a volte si da l'impressione sbagliata: nulla che nn si possa aggiustare con un post in più ;) Saluti AlexD PS: Per onore delle cronaca ero io primo a non amare la soluzione della Facada in quanto IMHO era una pezza ad un difetto di architettura ;) |
| Alessandro Di Noia |
Re: Partial types
Hai spiegato (molto meglio e motivando a ragion veduta) esattamente quello che pensavo io.
Per quel che vale, mi trovo daccordo (ancora una volta) con Lawrence. AlexD |