Il buon programmatore - consigli pratici per una vita felice

Post on 09-May-2015

1.275 views 3 download

description

Lavorando come consulente mi sono trovato spesso di fronte a problematiche (a volte banali), ma che erano la causa di gravi problemi di performance dell'appliccazione realizzata, oppure più banali, ma che rendevano il codice meno manutenibile e gestibile, specialmente lavorando in team. Vedere che nel tempo, persone/realtà diverse, commettono gli stessi errori mi ha fatto pensare a questa sessione...dove intendo elencare i problemi più comuni, che per causa di tempo o scarsa conoscenza, vengono commessi, e proporre delle soluzioni semplici da poter applicare fin da subito. (ASP.NET, ma non solo)

Transcript of Il buon programmatore - consigli pratici per una vita felice

Andrea Dottor – Microsoft MVP ASP.NET/IIS

IL BUON PROGRAMMATOREconsigli pratici per una vita felice

Esperienze personali Da anni lavoro come libero professionista, e

durante le consulenze/sviluppo/formazione sono incappato spesso in "errori" comuni

www.dottor.net

Altre fonti: Damian Edwards: Don’t do that, do this!

Recommendations from the ASP.NET team http://vimeo.com/68390507

What not to do in ASP.NET, and what to do instead http://www.asp.net/aspnet/overview/aspnet-45/what-

not-to-do-in-aspnet,-and-what-to-do-instead

Perché questa sessione?

Inesperienza Si crede di conoscere completamente una

tecnologia Non si conosce l'esistenza di particolari

funzioni/metodi

Fretta Un progetto "prototipo" sviluppato in

fretta, diventa la base per un "prodotto" Il budget/tempistiche non sono realistiche

Pigrizia Si sceglie la strada più breve, perché fare

le cose nel modo migliore richiederebbe qualche riga di codice in più

Da dove vengono gli errori?

Riuso e manutenzione del codice Configurazione Prestazioni Produttività

Cosa vedremo in questa sessione?

Riuso del codice e manutenzione

Framework Design Guidelines http://msdn.microsoft.com/en-us/library/ms229042.aspx

General Naming Conventions http://msdn.microsoft.com/en-us/library/vstudio/ms229045(v=vs.110).aspx

Namespace Naming Guidelines http://msdn.microsoft.com/en-us/library/893ke618(v=vs.71).aspx

C# Reference http://msdn.microsoft.com/en-us/library/vstudio/618ayhy6(v=vs.110).aspx

Non esistono line guida solo su come scrivere il codice Es: Visual Studio Team Foundation Server Branching

and Merging Guide http://vsarbranchingguide.codeplex.com/

E' importante che a livello aziendale venga deciso quali standard e naming-convention si debba adottare

Naming convention e linee guida

Separare in progetti/assembly separati la logica che può essere riutilizzata Helpers Accesso ai dati DTO

Scrivere tutto in un unico progetto significa dover riscrivere parte del codice nel caso di nuova applicazione (simile)

Dare nomi sensati agli assembly <Company>.<Component>.dll

Le Portable Class Library permettono di condividere codice tra progetti di tipo diverso

Come strutturare i progetti di un'applicazione

I namespace permettono di organizzare il codice all'interno di un assembly

Permettono di tenere separate classi che hanno compiti/scopi differenti All'interno dello stesso namespace non

possono esistere più classi con lo stesso nomeCompanyName.TechnologyName[.Feature][.Design]

Gli assembly separano il codice a livello fisico, i namespace invece a livello logico

Cosa sono i namespace? A che servono?

demo

Il riutilizzo del codice vale anche per gli stili, e per il codice JavaScript!!

Non settare gli stili nei controlli, ma bensì impostiamo delle classi css e usiamo i fogli di stile Riutilizzo degli stili

I file css vengono messi in cache dal browser Le pagine pesano meno

Facilità nel seguire i repentini cambi idea del cliente, senza doversi ripassare tutte le pagine

In WebForm "avevamo" i temi, non dimentichiamoci le buone abitudini

Centralizziamo gli stili

Fanno risparmiare un sacco di tempo Introduzione di funzionalità avanzate in tempi

ridotti Il costo dei controlli è sicuramente inferiore al

costo di uno sviluppatore (che implementi lo stesso controllo)

Ma non è tutto oro quello che luccica: se hanno un bug? se modificano il loro rendering? quanto JavaScript iniettano?

Utilizziamoli solo quando è realmente necessario

Controlli di terze parte

Una classe per file Se una classe ha molte righe di

codice, è preferibile utilizzare le partial class (e dividerla in più file) invece di nascondere il codice con le region

Cercate di essere il più "aderenti" possibile a quello che è lo standard della tecnologia che utilizzate Gli accrocchi, barbatrucchi, workaround

non sono sempre una soluzione ideale

Buone abitudini

demo

Configurazione

Permette di applicare modifiche/trasformazioni ai file di configurazione in fase di compilazione Centralizzazione dei settings nel progetto Si può creare una "traformazione" per ogni

ambiente di pubblicazione

Evitano allo sviluppatore il copia&incolla o la modifica della configurazione ad ogni pubblicazione Spesso capita che nuovi settings non vengono

riportati in produzione

Web.config transormation

Offrono la possibibilità di specificare dei parametri (key-value) che permettono di parametrizzare l'applicazione senza dover ricompilare Vengono letti come String Non sono validati Nessuno ci avvisa della mancanza di un

AppSettings

Attenzione a modificare/disabilitare parametri di sicurezza (in produzione) http://

msdn.microsoft.com/en-us/library/hh975440 ES:

<add key="aspnet:MaxHttpCollectionKeys" value="1000" /><add key="aspnet:MaxJsonDeserializerMembers" value="1000" />

Uso corretto degli AppSettings

Il framework permette di avere all'interno dei file di configurazione delle proprie sezioni di configurazione custom.

A differenza degli AppSettings, queste possono essere tipizzate, e validate Valori obbligatori Valori di default Limiti, min max

Sezioni di configurazione custom

Se i file di configurazione hanno grosse dimensioni, è possibile suddividerli in più file

E' utile quando si lavora in team Ad esempio, le ConnectionString possono

essere diverse per ogni dev

Suddivisione della configurazione in più file

<appSettings configSource="AppSettings.config" />

demo

prestazioni

Il Viewstate non è il male E' utile, ma va utilizzato con cognizione di causa

L'abuso del Viewstate causa un degrado delle performance della pagine Tempo di serializzazione/deserializzazione Dimensione della pagina Tempo di trasmissione della pagina

Invece di utilizzare EnableViewState="false", preferire ViewStateMode="Disabled" nella direttiva di pagina, e settare ViewStateMode="Enabled" solo nei controlli che lo richiedono EnableViewState=false disabilita la ViewState anche

per i controlli figlio

Viewstate

Da ASP.NET 4.0 è presente la funzionalità di bundle & minification

Permette di ottimizzare i file JavaScript e CSS presenti nell'applicazione Crea un file unico, che raggruppa più file js Lo riduce di dimensione, minimizzandolo

Viene applicato quando si esegue l'applicazione in Release Non deve essere presente Debug=true nel

web.config

ASP.NET bundle & minification

demo

Ricordarsi sempre di pubblicare in produzione compilando in modalità Release

Rimuovere dal Web.config l'attributo debug="true" (presente nell'elemento compilation) , oppure impostarlo a "false"

In Debug gli assembly vengono arricchiti di codice necessario al debug, che però causano rallentamenti nell'esecuzione

Il codice ritornato dagli handler axd non viene messo in cache dal browser

Compilare in release & debug=false

Il Trace raccoglie informazioni su ogni richiesta fatta all'applicazione Oltre al normale tempo di esecuzione della

richiesta, viene aggiunto il tempo necessario al Trace per loggare

Il Trace necessita di spazio in memoria per mantenere le informazioni

Abilitarlo solo in caso di debug Inserire una regola di

trasformazione che rimuova la sezione, oppure che lo disabiliti per default

ASP.NET Trace

produttività

Visual Studio permette di allineare/indentare in modo automatico il codice CTRL+K CTRL+D

Le regole di formattazione del codice HTML possono essere modificate dai settings di Visual StudioTOOLS -> Options -> Text editor -> HTML -> Formatting

Il codice allineato correttamente facilita la lettura del codice stesso

A colpo d'occhio si riesce a capire come gli elementi sono innestati

Regole di formattazione

Utilizzare la tastiera invece di cercare il commando nella toolbar è più veloce

Quelli più frequenti sono: Commentare il codice

CTRL+K CTRL+C

Togliere il commento CTRL+K CTRL+U

Formattazione del codice CTRL+K CTRL+D

Aprire menu SmartTag (create Class, import using, ….) CTRL+.

Selezione rettangolare ALT+selezione

Visual Studio 2010 Keybinding Posters http://www.microsoft.com/en-us/download/details.aspx?

id=13189

Scorciatoie da tastiera

demo

Il "var" non è il variant di Visual Basic 6

Il "var" viene sostitutito in fase di compilazione con il tipo corretto

Personalmente lo trovo molto utile quando utilizzo tipi (molto) complessi Es:

Non abbiate paura del "var"

List<Tuple<int, string, DateTime>> result = new List<Tuple<int, string, DateTime>>();

var result = new List<Tuple<int, string, DateTime>>();

Il Logging è FONDAMENTALE Quando si è in produzione (spesso) è

l'unica cosa che permette di identificare un problema e la sua causa

Bisogna saper loggare Troppe informazione a volte equivale a non averne

nessuna Usare differenti livelli di log: INFO, DEBUG, ERROR

Esistono librerie che ci aiutano in questo Log4net Enterprise Library Logging Application Block …

Logging

Chi utilizza WCF, oltre al proprio logging può abilitare il Diagnostic

Permette di loggare qualsiasi cosa passi attraverso le classi di WCF Compresi i messaggi in ingresso ed uscita Permette di identificare errori che

avvengono ancora prima che il messaggio arrivi al nostro codice

WCF diagnostic / logging

demo

Da ASP.NET 4.0 il SqlMembershipProvider è stato sostituito dal UniversalProvider

Supporta tutti i database supportati dall'Entity Framework SQL Server, SQL Azure, SQL Compact, MySQL, …

Disponibile su NuGet http

://www.nuget.org/packages/Microsoft.AspNet.Providers/

Utilizzabile per Session Membership Roles Profile

ASP.NET membership - UniversalProvider

Un source-control non è fatto solo per chi lavora in team

Tenere una copia del codice (solo) in locale è pericoloso

Avere lo storico dei cambiamenti è un aiuto da non sottovalutare

Esistono soluzione gratuite che si possono adottare http://tfs.visualstudio.com/ https://github.com/ http://subversion.tigris.org/ …

Controllo sorgente

Mantenere il codice semplice e pulito è la prima regola per facilitare il lavoro di manutenzione Ricordate sempre il "Principio KISS"

Non complicate le applicazioni con Pattern solo perché fanno figo/moda. Non servono sempre Sono fatti per risolvere determinate

problematiche

Over-ingegnerizzare una soluzione è il primo modo per farsi del male

Scrivete il codice come se lo doveste manutenere voi

Conclusioni

feedback

10

o feedback su:• http://xedotnet.org/feedback

• Codice: OCT68• Materiale:

http://slpg.org/xe102013

Email: andrea@dottor.netWebsite: http://www.dottor.net Blog: http://blog.dottor.netTwitter: http://twitter.com/dottor

feedback