venerdì 7 ottobre 2011

MVVM in 5 minuti


Vuoi vedere Model-View-ViewModel (MVVM) senza tutti gli "aiutanti"? Forse si pensava che stessi scherzando nel mio articolo precedente, " MVVM fondamentali ". Ora, io amo aiutanti per cose come comandante, comportamenti, messaggistica e localizzatori. Ma tengo alla mia precedente affermazione che queste cose aiutano MVVM, che è tutto separazione, non fanno MVVM. Questa è una distinzione importante.
Devo ammettere che con tutte le conversazioni su come sviluppare con MVVM a volte è difficile separare ciò che è MVVM e quello che è solo un aiutante. Questa è una delle ragioni che sto scrivendo su questi argomenti. Penso che sia importante fare questa distinzione per primo. Una volta capito MVVM, si può decidere quali aiutanti che si desidera utilizzare. Altrimenti si può seguire il percorso MVVM solo per sentire come hai fatto saltare all'indietro con un idrante.


Quindi diamo un'occhiata a MVVM senza fronzoli. Questa applicazione di esempio sarà la Ciao
Mondo della nostra generazione: una applicazione Twitter che sarà simile l'immagine in Figura 1.
Figura 1. L'immagine creata dalla TimelineView.xaml di una applicazione Twitter costruito utilizzando il Model-View-ViewModel.
Modello
mio Twitter applicazione ha bisogno tweet di apparire nella linea temporale principale. Quindi la prima cosa che faccio è creare un modello chiamato Tweet. La classe Tweet eredita da una classe che chiamo osservabili-Object, che implementa semplicemente il INotifyPropertyChanged (INPC) interfaccia. INPC è una semplice interfaccia che implementa un PropertyChanged, che è ciò che un modello deve comunicare ai controlli di una visualizzazione che qualcosa su una proprietà è cambiato. Avrei potuto implementato l'interfaccia INPC direttamente sul modello ma non ho mai farlo nel "mondo reale", quindi perché preoccuparsi qui. Mi piace il ObservableObject classe di base perché semplifica questo processo.
Il resto del mio modello ha una serie di proprietà che ne descrivono il Tweet, come ad esempio UserName. Tutte le proprietà chiamare il metodo RaisePropertyChanged (che è sulla classe ObservableObject):
protetti const string UserNameProperty = 
"UserName";
stringa _userName privati;
stringa UserName pubblico
{
  get {_userName ritorno;}
  insieme
  {
    if (_userName! valore =)
    {
      _userName = valore;
      RaisePropertyChanged (UserNameProperty,           
        TitleProperty);
    }
  }
}
Il modello è una semplice rappresentazione dei dati. E 'diviso in propria classe perché io possa avere più di un Vista dove voglio per visualizzare le informazioni tweet. La separazione favorisce il riutilizzo di codice.
ViewModel
La classe ViewModel è costruito per una vista. Sì, può essere utilizzato da più di un Vista, ma cerchiamo di non andare fuori su quello che-se e altri scenari molto ancora. Per ora, supponiamo che abbiamo un ViewModel il cui compito è quello di esporre i punti dati e la logica di presentazione che ha bisogno un View specifico. La classe ha una proprietà TimelineViewModel Tweets, che è un osservabile-Collection <Tweet> che aggrega un insieme di istanze della classe del modello per la vista della mia applicazione di esempio.
Qual è il compito principale del mio ViewModel?
  1. Esporre i modelli necessari per la visualizzazione (i tweet o IsBusy, per esempio)
  2. Esporre la logica necessaria per la visualizzazione (RefreshTweets, per esempio)
  3. Gestire qualsiasi logica di presentazione
Il ViewModel eredita da osservabili-Object (che implementa INPC), così tutte le sue proprietà farà si che il View sapere quando cambiano. Questo esempio utilizza solo un singolo modello, ma in molti casi il ViewModel può aggregare classi modello multiplo, che potrebbe anche essere grafi di oggetti. Il ViewModel è costruito per gestire la personalizzazione della esposizione dei dati per la visualizzazione. Quello che voglio dire è che il ViewModel può aggregare una o più classi del modello e aggiungere altre proprietà che la visualizzazione può avere bisogno. Per esempio, il mio Vista potrebbe essere necessario legarsi a proprietà come IsBusy o LoggedInAsName, nessuno dei quali si trovano nel Tweet modello. Posso semplicemente aggiungere questi al ViewModel, se necessario.
Il ViewModel si occupa anche di logica di presentazione. Un semplice esempio di questo è il compito di fare la chiamata per andare a prendere gli ultimi tweet e il caricamento della proprietà tweet nel ViewModel. Nella mia applicazione di esempio ho preso in giro questo quindi non è in realtà colpire i servizi di Twitter, ma il concetto è esattamente lo stesso.
OK, veloce punta pro: mi piacciono le mie classi ViewModel per dirigere le chiamate manipolazione dei dati, tuttavia, mi astratto le chiamate a un servizio dati, poi verso la propria classe. In questo esempio vorrei creare una classe chiamata TwitterService e sarebbe quindi apportare le chiamate API di Twitter. Il ViewModel sarebbe solo GetTweets chiamata al metodo della classe di TwitterService. Trovo questa astrazione veramente bello per tre grandi ragioni. In primo luogo, si nasconde l'API servizio Web le chiamate dal ViewModel, che in realtà può fregare di meno di come si ottiene i suoi dati.In secondo luogo, la classe TwitterService ora è riutilizzabile per classi ViewModel altri. Infine, questo è veramente grande per il design-time dei dati e per i dati beffe quando unit test.
Visualizza
Ora arriviamo alla View, il pezzo finale della triade MVVM. Il mio TimelineView ha una ListBox che definisce un ItemTemplate per visualizzare i tweets individuali. Timeline-View è databound al TimelineViewModel dichiarativo in XAML.In primo luogo, il ViewModel è creato come una risorsa statica:
<phone:PhoneApplicationPage.Resources>
  <local:TimelineViewModel x:Key="TimelineViewModel" />
</ Telefono: PhoneApplicationPage.Resources>
Poi la vista è associato ai dati del ViewModel impostando il DataContext. In applicazione di esempio faccio questo nel pannello esterno della pagina, che risulta essere la griglia:
DataContext = "{origine di associazione =
  StaticResource TimelineViewModel {}} "
Conclusioni
Quando si esegue l'applicazione di esempio vedrete non vi sono ulteriori riferimenti, nessun codice di magia, niente di niente, nada. Alcuni di voi starete chiedendo come collegare comunicazione l'interfaccia utente per il ViewModel, i comandi, comportamenti, localizzatori, iniezione di dipendenza, di inversione di contenitori di controllo, messaggi e dialoghi. Questi compiti possono certamente essere fatto con MVVM. In questa colonna si concentra sui fondamenti della MVVM. Naturalmente, ci sono ottimi modi per affrontare tutti questi scenari. Ma prima di volare, cerchiamo di camminare. E questo è prospettiva di papà.

giovedì 6 ottobre 2011

Nascita di una UX - ASafaWeb ottiene una parte dell'identità 2


Tornato in parte 1 di Nascita di una UX ho parlato di identificare gli stili che mi piaceva, la testa inizia il default MVC 3 modello che si dà, l'eterna lotta di Photoshop prima contro i CSS prima, azzera i CSS poi effettivamente una partenza in stile quello centrale elemento di ASafaWeb e rendendo ancora bel gioco tutti i browser. E questo era esso - uff!
Questa volta si tratta di debug del codice, la costruzione del nav e poi completamente cambiare idea su azzera CSS. Beh forse non del tutto , ma piuttosto capire un po 'di più su ciò che "reset" significa veramente e invece venuta la cosa da un angolo diverso, utilizzando un approccio di "normalizzazione", invece. Potrebbe suonare un po 'semantica, ma c'è una differenza importante filosofico.
Parlando di semantica, avremo anche una buona occhiata a cosa semantica significa in codice HTML. E 'un concetto molto importante che spesso viene frainteso così darò un riassunto qui.

Non uscire di casa senza Firebug

Uno strumento qualsiasi sviluppatore web che si rispetti è intimamente familiare è Firebug .Le 9 strumenti di sviluppo di IE sono in realtà molto buona, ma Firebug ha cinque anni e milioni di utenti sotto la sua cintura così rimane lo strumento più gente subito pensa.Vediamo in azione.
Una cosa che volevo fare in ASafaWeb è quello di ottenere il diritto nav fino alla parte superiore della pagina, piuttosto che seduto sotto l'intestazione. Commutazione intorno nel markup è abbastanza facile, ma non c'è chiaramente più a che fare:
Layout Nav in ASafaWeb
Ora, posso iniziare a pesca a strascico attraverso i CSS e cercando di capire manualmente il motivo per cui non è seduto in cima alla pagina o posso fuoco fino Firebug e farlo mi dicono.Tutto quello che devi fare è evidenziare un elemento HTML nella sorgente e vedrò una visualizzazione dell'elemento in alto e il CSS applicato sulla destra:
Evidenziare firebug di nav
Il clou turchese in cima l'immagine qui sopra mostra l'elemento che ha selezionato e la banda gialla sopra indica margine. Possiamo quindi vedere che il margine stesso rappresentato nel CSS in basso a destra dell'immagine. Non c'è niente di più facile di così!

Come semantico

C'è una partita che va in un nav. Certo, potrebbe sembrare solo una serie di link, ma c'è molto di più ad esso che quello. Per cominciare, diamo uno sguardo al markup:
< intestazione >
  < nav >
    < img src Contenuto ="../../ / Immagini / "SmallLogo.png alt = "ASafaWeb Logo" />
    < div id = "logindisplay">
      < ul id = "Accesso">
        < li > < uno href = "/ Account / Logoff"> Log off troyhunt </ uno > </ li >
      </ ul >
    </ div >
    < ul id = "menu">
      < li > < uno href ="/"> casa </ uno > </ li >
      < li > < uno href = "/ elmah.axd"> ELMAH </ uno > </ li >
      < li > < uno href = "/ Log"> Log </ uno > </ li >
      < li > < uno href = "/ Util / e-mail"> e-mail </ uno > </ li >
      < li > < uno href = "/ Home / Chi"> Chi ASafaWeb </ uno > </ li >
      < li > < uno href = "/ Home / Scansioni"> panoramica Scansioni </ uno > </ li >
    </ ul >
  </ nav >
  < div id = "title">
    < h1 > Analizzatore di sicurezza automatica per i siti web ASP.NET </ h1 >
  </ div >
</ intestazione >
Non preoccuparti per il visual design ancora, che è priva di conseguenze per il markup. Ci sono alcune cose degne di nota nel codice di cui sopra. Tanto per cominciare, non è proprio il mio markup perché per la maggior parte, è proprio quello che si ottiene in default ASP.NET MVC 3 modello. Che bello questo proposito è che è semanticamente corretto. Ecco cosa voglio dire con questo:
Semantic HTML, o "semanticamente corretto HTML", è HTML dove i tag usati per strutturare il contenuto sono selezionati e opportunamente applicati al significato del contenuto.
Questo è dal Introduzione alla semantica HTML messaggio sopra sul Web Design dal sito di Gratta e qual è il suo dire è che i tag HTML in realtà hanno significato . Quindi cerchiamo di guardare indietro fino alla marcatura sopra e in particolare due comandi che potrebbero sembrare del tutto nuovo a voi:
  1. L' elemento di intestazione rappresenta un gruppo di aiuti di introduzione o la navigazione.
  2. L' elemento nav rappresenta una sezione di una pagina che si collega ad altre pagine o parti all'interno della pagina.
Ok, questo sembra piuttosto auto-esplicativo, ma questo è il punto ! HTML 5 non solo ha dato un sacco di nuove caratteristiche funzionali, ma fornisce anche un sacco di nuova semantica. E non importa se un browser più vecchio non capisce l'intento semantico, ma sarà solo il rendering del contenuto e applicare qualsiasi pre-definiti preset CSS contro di essa. Nizza.
L'altra cosa è - e siamo ancora sulla semantica qui - è che i link appaiono come voci di elenco all'interno di una lista non ordinata. Perché? Perché questo è esattamente quello che un nav è - una serie di link in cui l'ordine è (di solito) poco importante. Certo, potremmo semplicemente gettare un po 'di tag di collegamento ipertestuale alla pagina, ma questo non implica intenti.
Quindi, pensare a quello che è appena il markup ci sta dicendo, e non solo noi, ma il browser come bene, sappiamo che c'è un colpo di testa che implica che questo non è realmente contenuto del corpo, piuttosto qualcosa che calcia solo la pagina di. Sappiamo che all'interno vi si possono trovare alcuni di navigazione e che l'ordine di esso non è importante. Infine, sappiamo che ci sono una serie di articoli con link all'interno che la navigazione. Possiamo dire tutto questo senza vedere alcun rendering del browser, perché il markup ci dice questo tramite il suo intento semantico.
Ma non è solo HTML 5 che implica intento semantica, ecco un altro esempio classico: testo corsivo. L'idea di HTML semantico è quello di descrivere l'intento , piuttosto che realizzazione visiva. L'intento grammaticale del testo in corsivo è di fornire enfasi - corsivo è in realtà solo la rappresentazione visiva di questo. Ciò significa che un tag <i> è veramente uso improprio e si dovrebbe invece utilizzare un tag <em>. Allo stesso modo un tag <b> deve essere sostituito per un tag <strong> come lo descrive intento, piuttosto che di visualizzazione. Ci sono alcuni dettagli su questo nel post intitolato La i, b, em, e forti elementi sopra sul sito web HTML 5 medico.
Un commento finale sulla semantica semplicemente perché è un piccolo cruccio: l'intento semantica di una tabella è quello di contenere dati in formato tabella . Dalla definizione delle tabelle del W3C :
Il modello di tabella HTML consente agli autori di sistemare i dati - testo, testo preformattato, immagini, link, moduli, campi modulo, altre tabelle, ecc - in righe e colonne di celle.
non è - ripeto - non è destinato al layout delle pagine (sottolineatura mia):
Le tabelle non dovrebbe essere usato solo come un mezzo per contenuti layout del documento
E:
gli autori dovrebbero usare i fogli di stile per controllare l'impaginazione piuttosto che sulle tabelle
Se si sta utilizzando tabelle per il layout delle pagine, lo stop, basta fermarsi proprio ora .Andate a dare un'occhiata al CSS Zen Garden e prendere solo un po 'di tempo per imparare a tracciare un pagina in modo corretto perché si sta facendo in modo inequivocabile sbagliato!

Bye bye resetta CSS, ciao normalizzazione CSS

Ah, non si fa solo l'amore a lavorare sul progetto e avere la propria autonomia per avviare la copia roba e girando le cose sulla loro testa quando non ti piace? :) Tornato a parte 1 ho applicato un ripristino CSS da Eric Meyer con l'obiettivo è quello di portare tutti i visitatori in linea con una rappresentazione comune di HTML e CSS. Buon piano, ma sembra che ci siano un paio di modi di andare su questo e il concetto di un reset CSS è in realtà un po 'diversa da quella di normalizzazione CSS.
Lasciatemi dimostrare; nell'immagine seguente vedrete che l'attuale "Chi ASafaWeb" pagina assomiglia senza CSS sotto qualsiasi forma:
ASafaWeb sulla pagina senza CSS
Va bene, più o meno quello che ci si aspetterebbe. Ora vorrei applicare il reset CSS:
ASafaWeb sulla pagina con un reset CSS
Whoa - WTF?! Vedete, quello che non riusciva a rendersi conto in prima è che il reset è stato effettivamente stripping il rendering predefinito di tag. Il motivo per cui non si erano accorti questo è che avevo buttato le definizioni ripristinare la parte superiore del CSS esistente dal default ASP.NET MVC 3 modello che passa poi a ridefinire un sacco di questi valori di default. E che, come allora ho imparato, è una specie di punto di un reset, le cose striscia giù per il metallo poi definire da zero. E 'un modo molto esplicito di lavorare.
Ora rimuovere il reset e si applicano normalize.css (ho evitato di rinominandolo normalise.css!) E vediamo come stanno le cose:
ASafaWeb sulla pagina con normalize.css
Ok, ora siamo quasi nuovo al comportamento predefinito. I proiettili elemento lista sono stati rimossi e il margine è passato dal corpo. Oh, e tutto ciò che ora è un sans-serif ma a parte questo siamo abbastanza molto indietro al comportamento del browser predefinito. E questo è davvero il punto - normalize.css conserva la maggior parte delle impostazioni predefinite eallinea il comportamento tra i browser. Naturalmente non possono entrambi conservare tutti i comportamenti ed essere del tutto coerente o non servirebbe a nulla così qualcosa deve dare in alcuni browser in termini di deviazione da quello predefinito.
Personalmente preferisco questo approccio, perché penso che i principi fondamentali, come intestazioni di essere più grande e più forte rispetto ai paragrafi è una cosa abbastanza intuitivo da fare. Certo, i sostenitori di entrambe le suggeriscono utilizzando ogni come punto di partenza e poi da lì personalizzazione normalize.css ma sembra proprio essere meglio allineato l'intento originario di rendering del browser. L'altra cosa che mi piace è questa:
/ *
 * 1. Corregge il ridimensionamento del testo stranamente in IE6 / 7 quando il corpo di font-size è impostata utilizzando em unità
 * Http://clagnut.com/blog/348/ # c790
 * 2. Mantiene pagina centrato in tutti i browser, indipendentemente dall'altezza del contenuto
 * 3. Impedisce la dimensione del testo IOS regolare dopo il cambiamento di orientamento, senza disabilitare zoom utente
 *
 * /

html {
     font-size : 100% ; / * 1 * /
     overflow-y : scroll ; / * 2 * /
     -webkit-text-size-adjust : 100% ; / * 3 * /
     -ms-text-size-adjust : 100% ; / * 3 * /
 }

/ *
 * Indirizzi margini gestito in modo errato in IE6 / 7
 * /

corpo {
     margine : 0 ;
}

/ * 
 * Indirizzi font-family incoerenza tra 'textarea' e altri elementi del modulo.
 * /

corpo ,
 pulsante ,
 ingresso ,
 selezionare ,
 textarea {
     font-family : sans-serif ;
}
Si vede che? Un sacco di bella di feedback descrittivo come specificamente ciò che ogni definizione dello stile è l'impostazione di fare. Mi piace la natura esplicita di come questo file è stato commentato sia perché è un po 'educative e penso che renderà la vita molto più semplice in seguito, se trovo un problema tecnico. E 'anche chiaro dalla storia delle revisioni Github che gli stili sono in costante evoluzione e (presumo) rispondere alle nuove idiosincrasie nei browser. Ci si sente proprio come un approccio più approfondito rispetto al reset.

Costruire una navigazione

Passando alla navigazione ASafaWeb, ho voluto andare con qualcosa di discreto, con la messa a fuoco in modo chiaro rimanente sul contenuto della pagina. Il nav in questa applicazione ha un bassissimo-chiave ruolo e le funzioni principali del sito sono tutti abbastanza grandi e in grassetto sulla pagina. In realtà, la maggior parte di ciò che si vede nel nav nella immagine qui sotto è per scopi amministrativi modo che gli utenti finali non saranno in ogni caso si incontrano.
SNAGHTML2e4a0485
Si tratta di un nav abbastanza vaniglia per ora e sto riservandosi il diritto di cambiare totalmente la mia mente! Ma quello che mi piace è che è discreto in posizione, dimensioni e colori. C'è un po 'di varietà gettato nella mischia una volta che gli stati di rollover emergere ma per la maggior parte è molto discreto.
Ciò che è non è chiaro dall'immagine qui sopra è che anche le scale bene. Il testo "Log off troyhunt" galleggia verso il bordo destro e le voci sul nav a sinistra. Parlerò di più su larghezze di contenuti e avvolgente nella parte successiva della serie.

Riassunto

Ho passato un bel po 'di tempo gingillarsi con stabilire linee di base prima con il reset CSS e poi con normalize.css. Si può sentire un po 'controproducente a volte, ma è il tipo di lavoro fondamentale che può salvare mal di testa in seguito quando le cose sono più complesse e di problemi. Tempo ben investito IMHO.
Quindi è lento e costante, la crescita organica per ASafaWeb in questa fase. Il prossimo post sarà entrare in uno dei problemi più grandi del biglietto se il layout (disegno larghezza fissa rispetto al variabile e anche la tipografia), quindi le cose dovrebbero iniziare a sentirsi un po 'più coesa dopo.


Corso Visual Studio - Corsi Visual Studio
Corso .Net- Corso Dot.Net - Corso Vb.net
Corso C# - Corso PHP - Corso Joomla

mercoledì 5 ottobre 2011

Nuovi XBRL e proposto Tassonomia GAAP Financial Reporting Released

L'International Financial Reporting Standards (IFRS) Foundation, l'organismo di vigilanza delle commissioni principi contabili internazionali (IASB), ha annunciato di aver completato la prima parte del suo progetto per affrontare le richieste da parte dei legislatori e dei redattori, tra cui la Securities and Exchange Commission (SEC ), di proroghe di Reporting Language IFRS eXtensible Business (XBRL) tassonomia. Questo comune provvisoria-pratica tassonomia fornirà circa 350 estensioni per i tipi più comunemente utilizzati delle spese sul bilancio, come le vendite e il marketing. Proseguono i lavori per estensioni al tagging dettagliato delle note di bilancio. La squadra IFRS XBRL si aspetta di pubblicare proposte nel mese di ottobre 2011. Il termine ultimo per presentare osservazioni scritte sulla proposta Report 2012 US GAAP Tassonomia finanziari è il 31 ottobre. La finale 2012 tassonomia dovrebbe essere ultimato e pubblicato nei primi mesi del 2012. http://www.iasbweb.org/


Corso Visual Studio - Corsi Visual Studio
Corso .Net- Corso Dot.Net - Corso Vb.net
Corso C# - Corso PHP - Corso Joomla

martedì 4 ottobre 2011

5 meraviglie minuto: Il provider di appartenenze ASP.NET


Spesso avrò una discussione con un fornitore di software o sviluppatore sull'implementazione di un particolare funzionalità o svolgere un determinato compito, che io percepisco come facile, ma torneranno con una sorta di stima stravaganti.
"Saldamente implementare un meccanismo di autenticazione? 3 settimane per favore! "
"Identità problemi di prestazioni di rete in una web app? Hmmm, forse 2 o 3 giorni. "
E così via e così via. Parte del mio lavoro quotidiano è quello di cercare di ottenere il maggior successo per buck da dollari guadagnati duri il mio datore di lavoro lo farò di solito tornare con qualcosa del tipo "Aspetta - Io non ti sto chiedendo di volare sulla luna, questo dovrebbe essere un 5 posti di lavoro minuto. "Forse è solo la natura accattivante di alcune persone, ma io spesso sentire qualcosa sulla falsariga di" Ah, ma sei molto intelligente! "Uh, no, non è questo il motivo.
So solo alcune scorciatoie, questo è tutto. Non sono necessariamente high tech e spesso sono abbastanza conosciuto ma sono il genere di cose in cui se non si conoscono, si finisce per soffiare giorni o settimane o semplicemente mettendo nel "troppo duro" canestro e perdendo alcune delle bontà che è là fuori a vostra disposizione.
L'idea di "meraviglie 5 minuti" è quello di mostrare quanto sia semplice la vita di sviluppo può essere utilizzando alcuni di questi trucchi (cappello a punta Jim Hare per aver ispirato il titolo con la sua serie Little Wonders ). Saranno tutti i video, non saranno mai funzionare per più di 5 minuti e faranno sempre pratico. Saranno vecchio cappello a molte persone, ma per gli altri, sarà un mondo nuovo che non sapevano già esisteva proprio davanti a loro.

Il provider di appartenenze ASP.NET

Una scelta facile per la prima meraviglia, la gioia del provider di appartenenze ASP.NET è che ci vuole qualcosa che è tempo di costruire e spesso pieno di buchi di sicurezza abbastanza grande per guidare un camion attraverso e lo rende veramente facile. In realtà questo è più vicina a quattro minuti inclusi a partire da nessun progetto, nessun database e narrare il tutto come sono andato lungo. Enjoy:

Referenze

Il comando emesso nella finestra di comando di Visual Studio è stato aspnet_regsql .
L'algoritmo di hash predefinito per il provider di appartenenza. NET 3.5 e precedenti è SHA1.Dalla. NET 4 questo cambiato in SHA256 .
Per ulteriori informazioni sul provider di appartenenza, vedere Procedura: utilizzare l'appartenenza in ASP.NET 2.0 .


Corso Visual Studio - Corsi Visual Studio
Corso .Net- Corso Dot.Net - Corso Vb.net
Corso C# - Corso PHP - Corso Joomla

lunedì 3 ottobre 2011

Distribuzione di elenchi in SharePoint con Visual Studio 2010


Ogni anno, uno dei miei obiettivi come sviluppatore di SharePoint è di fare un po 'meno di codifica in CAML che ho fatto l'anno prima. Spero che, un giorno, l'unico posto dove effettivamente è necessario generare il codice CAML consiste nel rilascio query - e LINQ, più i discendenti di spmetal può anche eliminare tale. Il luogo più recenti in cui ho eliminato CAML dalla mia vita è nella creazione di liste.
In SharePoint, ci sono tre modi per aggiungere un elenco di un sito di SharePoint: CAML, il codice e l'interfaccia utente di SharePoint. Utilizzando CAML richiede di definire l'elenco nel file Schema.xml - intimidatorio, a dir poco. Il codice per aggiungere un elenco di un sito di SharePoint è relativamente semplice, a condizione che si intende utilizzare uno dei modelli già esistenti senza modifiche. Una volta che le cose iniziare a personalizzare la struttura della lista cominciano a complicarsi.

Ma pensiamo quando è necessario creare un elenco. Ovviamente, si sta andando ad avere bisogno di creare l'elenco nella copia sviluppo di SharePoint come parte della funzione di costruire il tuo ... e probabilmente tramite l'interfaccia utente di SharePoint, piuttosto che CAML o codice, per creare quella lista. Il fatto triste è che, in assenza di un designer elenco SharePoint in Visual Studio, il miglior strumento per la creazione di un elenco SharePoint è SharePoint.
Quindi, l'unica volta che si sta andando ad avere bisogno di creare una lista utilizzando CAML o codice è quando si "ri-creare" una lista come parte della distribuzione alla produzione. Se sei solo la distribuzione in un sito di produzione poi la scelta appropriata potrebbe essere quella di sedersi giù e creare l'elenco nel sito di produzione utilizzando l'interfaccia utente di SharePoint (che è quello che ho il sospetto maggior parte degli sviluppatori di SharePoint fare). C'è qualche rischio qui perché l'elenco che si creano in produzione durante l'implementazione potrebbe non corrispondere la lista nel vostro sistema di sviluppo. L'alternativa è, nel sistema di sviluppo, per costruire faticosamente un insieme di CAML o codice che ricrea la lista che hai già definito nel sistema di sviluppo utilizzando l'interfaccia utente di SharePoint. Mentre questo processo sarà sicuramente ridurre il rischio di avere l'elenco definito in modo errato nella produzione, è anche andando a occupare molto del vostro tempo.
Se ri-creazione della lista nell'interfaccia utente di SharePoint come parte della distribuzione di soluzione non è un'opzione, quindi Visual Studio 2010 (la prima versione di Visual Studio per sostenere effettivamente lo sviluppo di SharePoint) ha un'altra soluzione: l'importazione dei file WSP. Questo consente di creare l'elenco in SharePoint (lo strumento migliore) e poi trasferirlo a Visual Studio, dove è possibile includerlo nella soluzione.
Il primo passo, dopo aver creato l'elenco SharePoint, è quello di esportarlo - e il resto del sito - utilizzando la funzione "Salva sito come modello di" scelta nella sezione Azioni sito della pagina del sito del sito Impostazioni. Che aggiunge un modello di sito alla galleria Solutions del sito dove è possibile scaricarlo come file wsp.
Il passo successivo è quello di importare il file wsp in Visual Studio 2010. Potete farlo creando un nuovo progetto con File | Nuovo progetto e selezionando SharePoint Importa pacchetto Solution. Come parte della creazione di quel progetto, avrete l'opportunità di individuare il file wsp esportato e selezionarlo.
Visual Studio visualizza un elenco di tutti gli elementi nel modello, che saranno selezionati per l'importazione. Dal momento che si tratta in genere un sacco di voce, il modo più semplice per ridurlo ai soli elementi che si desidera è quello di selezionare prima tutte le caselle di controllo utilizzando ctrl_a e quindi deselezionare la casella di controllo prima - tutte le caselle di controllo sarà tolta la spunta. È quindi possibile scorrere l'elenco e spuntare solo gli elementi che realmente desidera importare.
Ci sono un paio di clic sul pulsante più coinvolti per ottenere il progetto avviato, ma, una volta che siete li cliccato, avrete tutte le CAML che è necessario distribuire l'elenco. Ci sono in genere più caratteristiche definite nel progetto di quello che vuole, così io di solito eliminarli tutti tranne uno e combinare tutto nel progetto in una sola funzione (anche facile da fare in Visual Studio 2010), ma quel passaggio non è essenziale. Ora avete una soluzione SharePoint che affidabile la distribuzione alla produzione della stessa lista che testato con lo sviluppo.
E, come un ulteriore vantaggio, il progetto risultante di Visual Studio farà tutti pensano che effettivamente sa CAML.