La potenza è nulla senza controllo

“questa è classe, coglionazzo!” (cit.) o “si salvi chi può” (cit.)?

public class DiscussionGroupDto
{
    public int Id;
    public string Description;
    public string Name;
    public int NumberOfPosts;
    public int NumberOfThreads;
    public DiscussionMessageDto LastMessage;
}

public class DiscussionMessageDto
{
    public int Id;
    public string AuthorName;
    public DateTime DateOfPublishing;
    public string Subject;
    public int ThreadId;
}

IList<DiscussionGroupDto> groups = (from g in domain.DiscussionGroupSet
            let threadCount = (from t in domain.DiscussionThreadSet where t.DiscussionGroup==g && t.IsReadOnly==false select t).Count()
            let postCount = (from t in domain.DiscussionThreadSet where t.DiscussionGroup == g from m in t.Messages select m.Id).Count()
            let lastMessage = (from t in domain.DiscussionThreadSet where t.DiscussionGroup == g from m in t.Messages orderby m.DateOfPublishing descending select new DiscussionGroupCategoryDto.DiscussionMessageDto { Id = m.Id, AuthorName = m.AuthorName, DateOfPublishing = m.DateOfPublishing, Subject = m.Subject, ThreadId = m.DiscussionThread.Id }).FirstOrDefault()
            where g.Category.Id == c.Id orderby g.Name select new DiscussionGroupCategoryDto.DiscussionGroupDto { Id = g.Id, Description = g.Description, Name = g.Name, NumberOfThreads=threadCount, NumberOfPosts=postCount, LastMessage=lastMessage }).ToList();

 

Technorati Tag: ,

VS10 beta1 vs. UML

Ricapitoliamo:

  • BENE: la versione UML di riferimento è della famiglia 2.x
  • BENE: permette di creare/associare work item TFS agli elementi presenti nei modelli. *Fantastico*
  • MALE: non genera codice quindi il modello è messo lì solo per essere “ammirato”. Immaginate che divertimento (e che spreco di tempo) modellare (e mantenere in sync) 2 volte un “party pattern” (logical class diagram *e* EDM/Class Diagram). Ridicolo. “This feature is by design”? Grottesco.
  • MALE: la modalità di configurazione degli elementi dei diagrammi è *totalmente* da rivedere: ad esempio, usare la propertygrid di VS per scrivere la descrizione di uno use case è una pena
  • MALE: non è stato nè realizzato nè testato da qualcuno che usa “day by day” UML, altrimenti (tanto per fare un esempio) un messaggio sincrono in un diagramma di sequenza non mostrerebbe, per default, la “freccia” rappresentante il valore di ritorno.

In sintesi, “bello senz’anima” (semi cit.)

Meno in sintesi: nell’80% dei casi di UML si usano solo 3 diagrammi: use case, class e sequence, che dovrebbero quindi essere supportati *seriamente*; VS10 beta1 non lo fa: ad esempio, definire una sequenza (anche banale purchè significativa) è frustrante sia per “esperienza utente” sia per mancanza di feature.

Feedback al product team: “Acquistate UML Distilled (è piccolo - quindi si legge in fretta - e costa poco, quindi ce lo si può permettere anche in periodo di crisi) e usate VS10 per sviluppare (ad esempio) una versione di Navision; vi sarà tutto più chiaro”

Technorati Tag: ,,

Tutorial “.NET Solution Architecture”: riflessioni

Preparando il materiale per il tutorial “.NET Solution Architecture” che erogherò presso BASTA! Italia on Tour, ho optato per una agenda alternativa a quelle tipicamente dedicate a questa tematica: l’idea sarà quindi quella di partire dal “metodo” e non dalla “soluzione”; Domain Model, MVC, O/RM, SOA, etc etc sono tutte “belle cose", ma… Ne abbiamo *davvero* *sempre* bisogno? Ha sempre senso definire una architettura layered? E i tier? E la tennologggia?

I pattern (a qualunque livello di dettaglio o in qualunque dominio: architetturali, design, refactoring, test, …) nascono come “…soluzioni sperimentate a problemi ricorrenti…” dove i “problemi” sono i “requisiti” e non oggetti a sè, da usarsi e rimirarsi per nostro compiacimento estetico e pensare di aver predisposto una soluzione “cool”. La tecnologia è uno strumento: EF, NH, WCF, … si adottano se e quando abbassano il costo di implementazione/gestione dell’artefatto, e non per essere a la page in rapporto al guru/vendor di turno. E’ una piccola “battaglia” che ho iniziato in occasione degli Architecture Days 2006 nella famigerata sessione “Life between…”: chi c’era si ricorderà un lungo elenco di “ipotesi risolutive” (es: TS, TM, AR, DM, SL, SOA, …). Senza un problema, insomma, non c’è una soluzione: la soluzione esiste in funzione del problema, e non come ente a sè.

Tutorial “fuffoso” trascorso a parlare di “aria fritta”, quindi? Nemmeno per sogno, visto che –a puro titolo di esempio- parleremo di:

  • Come usare Entity Framework per gestire un Domain Model, ma solo dopo aver parlato di cosa sia *davvero* un Domain Model e di quando abbia senso implementarne uno: sono “entità” anche quelle del modello Chen, non c’è sempre bisogno di aggrapparci ad Evans
  • Entity Framework/NHibernate, ma solo dopo aver definito cosa sia un O/RM al fine di utilizzarlo essendo consapevoli della sua natura e non imparando a memoria l’elenco delle feature
  • Come usare WCF per implementare servizi SOAP/queued/transazionali/blahblahblah, ma solo dopo aver dato una definizione *contestualizzata* di servizio (tanto per fare un esempio, “servizio” in SOA e DDD hanno due significati non completamente sovrapponibili)
  • Virtualizzazione, per capire se e come “roba” tipo ESX o Hyper-V possa risultare vantaggiosa dal punto di vista architetturale e quali requisiti non funzionali possa soddisfare o, addirittura, introdurre
  • Inversion of Control, per capire come trarne davvero vantaggio e non finire a fare il solito esempietto basato sul container che istanzia l’implementazione concreta di ICustomer (ma in che film l’implementazione della domain logic ha bisogno di essere sostituita?)
  • ASP.NET MVC, per vederlo all’azione in un progetto reale (dove Assert.IsTrue(“reale”==”funzionante in produzione”) <g>)

Come al solito… “Io speriamo che me la cavo” (cit.)

UPDATE: dimenticavo: gli organizzatori hanno offerto uno sconto sulla quota di iscrizione ai soci UGIdotNET

ASP.NET MVC @ Workshop UGIdotNET

Uso il (o “abuso del”) blog per rispondere ad una domanda ricevuta via mail poichè ho pensato che la risposta possa essere di interesse comune. La domanda è: “Ho visto che terrai una sessione su ASP.NET MVC sia al workshop All4web sia in quello 3.5 ed oltre: poichè devo scegliere quali sessioni seguire, potresti dirmi se in pratica tratterai gli stessi argomenti?” La risposta è: “ni” :-) Le due sessioni, più che per argomenti (un controller è sempre un controller), si differenziano per taglio: la prima è a tutti gli effetti un cookbook, e quindi non si focalizza molto sulla libreria in sè bensì su soluzioni concrete a problemi quotidiani.

Per intenderci, ormai in bottega utilizziamo ASP.NET MVC in progetti “veri” da circa un anno e mi piacerebbe che questa sessione fosse quella alla quale mi sarebbe piaciuto assistere quando non avevo ancora acquisito la normale dimestichezza che solo la “quotidiana lotta per la sopravvivenza” ti permette di raggiungere :-) Non ho ancora deciso con precisione la lista dei “quesiti”, ma sicuramente avremo “roba” tipo: presentazione (paginata) di dati, generazione di feed RSS/Atom, gestione delle permission, realizzazione di una controller factory custom per avvantaggiarsi di un IoC container, test dei controller …

La seconda sessione (quella dell’8 giugno, per intenderci) è invece più “ampia”, e cerca di mostrare l’uso di MVC nel contesto di una intera applicazione: per intenderci, l’idea consiste nell’aprire Visual Studio e dare una sbirciatina organizzata insieme al sorgente di alcuni progetti: una specie di tour guidato ma senza i piazzisti che alla fine provano a venderti l’enciclopedia :-)

Per dubbi o domande… ci si becca sul forum!

Technorati Tag: ,

I just can’t get enough

200px-Sounds_of_the_Universe_Album_Cover

“I predict a riot” (cit.) @ #sqlconf09

Domani, con il beneplacito di Greenpeace e WWF (che supportano la causa “Tutela per gli O/RM”) terrò presso la SQL Server & BI Conference 09 una sessione intitolata “Impact of using an O/RM with SQL Server”. Due-info-due per i potenziali interessati: durante i 75 minuti non ci saranno effetti speciali o fuochi d’artificio, ma “solo” le considerazioni derivanti dai 5 anni di esperienza d’uso di vari O/RM (EF, iBatis, NHibernate, …) nei progetti che abbiamo realizzato in azienda, dando anche (ove possibile) una “sbirciata” al loro codice sorgente (“loro”==dei progetti :-) ).

P.S.: che titolo del Kaiser (Chiefs) per un post, nevvero? <g>

SGOOB!!!!

Il socio era in vena di anteprime: beh… more to come :-)

Technorati Tag:

Non è mai troppo tardi

Sono commosso: un post pubblicato dal team di Entity Framework ci informa che finalmente in MS qualcuno ha capito che un O/RM che non gestisca entità “self tracking” è *improponibile* in scenari distribuiti.

La notizia è molto positiva, perchè fino ad oggi tutte le notizie riguardanti la v2 erano relative a feature “carine” e in alcuni casi anche “importanti” (lazy load, PI, …) ma tutto sommato non *fondamentali*: adesso è sufficiente che si accorgano anche che, finchè non supporteranno seriamente il behaviour degli oggetti, adottare EF significa “buttare via” un bel pezzo di OOP, e a quel punto avremo un buon O/RM “made in Redmond” (dotato di un designer, oltretutto). Per la v2 non se ne parla, ma con un po’ di pazienza magari in v3… <g>

Technorati Tag: ,

GUISA.Restart();

Ok, abbiamo ripristinato un altro “pezzetto”: i forum GUISA sono ora raggiungibili anche via nntp all’indirizzo www.guisa.org. Il server richiede autenticazione: le credenziali sono quelle utilizzate per la registrazione al sito. Nella sezione “Media”, infine, abbiamo ripristinato i contenuti relativi alle 2 serie di webcast “aspire architect” erogati in collaborazione con Microsoft Italia. Pian pianino...

Technorati Tag: ,,

Agenda UGIdotNET

Ricapitolando:

  • Settimana prossima (martedi 17) ci si vede a Roma per il Technical After Hour: ecco agenda e form di iscrizione.
  • L’8 maggio abbiamo organizzato, in collaborazione ad un nutrito numero di community, “All4web”: è un evento dedicato allo sviluppo web in tutte le salse (ASP.NET MVC, Silverlight, JavaFX, Adobe Air, Flex, ...). Si svolgerà a Milano e sono disponibili qui agenda e modalità di iscrizione (gratuita).
  • Anche se non abbiamo ancora pubblicato l’agenda, è confermatissimo il workshop fissato per l’8 giugno a Predappio. Confermatissimo anche il “pre meeting godereccio”, nato dalla (ennesima) idea geniale di “un Uomo un mito” Alessandro Scardova :-)
Technorati Tag:
«luglio»
domlunmarmergiovensab
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678