Archive | July, 2009

Domæne klasser i Silverlight

30 Jul

Jeg har fik et spørgsmål fra Morten Schmidt omkring deling af domæne klasser mellem serveren og Silverlight klienten. Jeg tror at det er et spørgsmål som mange Silverlight udviklere sidder med, så lad os kigge lidt nærmere på hvordan det kan gøres.

 

Simpelt kodeeksempel

Først skal vi have oprettet en solution og lidt projekter; jeg har startet med at lave en Silverlight applikation og en webapplikation til at hoste den. Silverlight klienten kalder jeg (meget opfindsomt) MyClientApplication og webapplikationen kalder jeg MyHostWebApplication. Dernæst tilføjer jeg et almindeligt klassebibliotek til solutionen kaldet ServerModel samt et Silverlight klassebibliotek kaldet ClientModel.

 

2009-07-30_234505

 

Nu skal vores domæne klasser tilføjes til løsningen. I ServerModel tilføjer jeg klassen Customer og tilføjer de nødvendige properties.

 

  1: using System;
  2: using System.Collections.Generic;
  3: using System.Linq;
  4: using System.Text;
  5: using System.Runtime.Serialization;
  6: 
  7: namespace ServerModel
  8: {
  9:   [DataContractAttribute(Name = "Customer")]
 10:   public class Customer
 11:   {
 12:     [DataMember]
 13:     public Guid Id { get; set; }
 14:     [DataMember]
 15:     public string FirstName { get; set; }
 16:     [DataMember]
 17:     public string LastName { get; set; }
 18:     [DataMember]
 19:     public string FullName { get { return FirstName + " " + LastName; } set { } }
 20: 
 21: #if !SILVERLIGHT
 22:     [DataMember]
 23:     public string Address { get; set; }
 24: #endif
 25:   }
 26: }
 27: 

 

Bemærk at jeg har kun ønsker propertien Address med såfremt vi ikke er i et Silverlight projekt.

Nu kommer det store trick! Det vi egentlig ønsker, er jo at have den samme klasse i vores ClientModel projekt – så det er bare det vi gør. Jeg højreklikker på projektet og vælger Add –> Existing Item og finder Customer.cs filen. I stedet for at vælge Add vælger jeg Add As Link.

 

2009-07-30_235918

 

Det betyder egentlig, at i stedet for at tilføje filen, bliver der tilføjet et link til filen. Det betyder også, at bliver der lavet en opdatering i det ene projekt, slår det automatisk igennem på det andet projekt.

Når vi bruger klassen i vores ServerModel, bliver properties Address inkluderet, men når vi bruger den i vores ClientModel, bliver den udeladt – ganske fikst!

Lad mig prøve at bruge vores klasse; jeg opretter en service i vores webapplikation, der returner en udfyldt instans af vores Customer klasse. I clientapplikationen tilføjer jeg en reference til vores ClientModel projekt og laver en ServiceReference til vores service i webapplikationen.

I codebehind på vores XAML fil tilføjer jeg et kald til vores service metode, hvor jeg henter den instantierede kunde og sætter DataContext på siden.

 

CS-filen:

  1: using System;
  2: using System.Collections.Generic;
  3: using System.Linq;
  4: using System.Net;
  5: using System.Windows;
  6: using System.Windows.Controls;
  7: using System.Windows.Documents;
  8: using System.Windows.Input;
  9: using System.Windows.Media;
 10: using System.Windows.Media.Animation;
 11: using System.Windows.Shapes;
 12: using ServerModel;
 13: using MyClientApplication.ServiceReference1;
 14: 
 15: namespace MyClientApplication
 16: {
 17:   public partial class MainPage : UserControl
 18:   {
 19:     public MainPage()
 20:     {
 21:       InitializeComponent();
 22: 
 23:       MyServiceClient client = new MyServiceClient();
 24:       client.RetrieveCustomerCompleted += (se, ea) =>
 25:         {
 26:           ServerModel.Customer c = ea.Result;
 27:           //c.Address <-- here you can see that the address property is not available
 28:           LayoutRoot.DataContext = c;
 29:         };
 30:       client.RetrieveCustomerAsync();
 31:     }
 32:   }
 33: }
 34: 

 

XAML filen:

  1:   <StackPanel
  2:     x:Name="LayoutRoot">
  3:     <TextBlock
  4:       Text="{Binding Id}" />
  5:     <TextBlock
  6:       Text="{Binding FullName}" />
  7:     <TextBlock
  8:       Text="{Binding Address}" />
  9:   </StackPanel>
 10: 

 

Kører jeg webapplikationen nu, vil jeg få vist Id og FullName. Jeg vil ikke få vist Address, da den ikke er en del af den kompilerede klasse til Silverlight.

Den fulde kildekode til eksemplet finder du på mit skydrive.

Det er en meget forenklet udgave af, hvordan vi normalt opbygger den grundlæggende arkitektur i vores Silverlight projekter. Oftes vil vores services også være adskilt i seperate projekter og der vil være repositories der håndterer adgangen til vores services fra henholds klient og server.

I mange tilfælde vil det kunne betale sig, at tage mere eller mindre, udgangspunkt i et eksisterende framework. Der findes flere frameworks, der gør meget af det grundlæggende arkitektarbejde for os – herunder .NET RIA Services.

 

.NET RIA Services

Nikhil har skrevet en meget sjov post, der kort fortæller om, hvad .NET RIA Services er, og hvorfor man som udvikler bør anvende det (eller et lignende framework).

http://www.nikhilk.net/NET-RIA-Services-Twitter-Pitch.aspx

 

Gruppe på LinkedIn

For netop at få diskuteret nogle af de problemstillinger, der kan være i forbindelse med Silverlight udviklinger, er der en gruppe på LinkedIn til netop det. Formålet med gruppen er at mødes 5-6 gange årligt, diskutere problemstillinger og ellers få udvekslet lidt erfaringer.

http://www.linkedin.com/groups?about=&gid=2085262&trk=anet_ug_grppro

 

Happy Coding!

Thomas Castøe Martinsen

“Silverlight Discussion” møde

28 Jul

Så er næste Silverlight møde ved at blive udformet. Jeg har sat datoen til den 10. september 2009 og stedet til Frederiksberg.

Den foreløbige agenda ser således ud, men jeg vil MEGET gerne have jeres input til emner og eventuelt om I kunne tænke jer at lave et oplæg til et af emnerne:

14.00 – 14.15 Welcome
14.15 – 16.00 How to use Prism in Silverlight
16.15 – 18.00 –

Som I kan se har jeg udvidet arrangementet lidt i forhold til sidst i det der denne gang 2 emner. Det betyder dog også, at har du ikke mulighed for at komme allerede kl. 14.00, så kan du droppe ind kl. 16.00 og stadig være med.

Efter arrangementet syntes jeg at dem der har tid og lyst skal tage med ned og få lidt mad og drikke på en nærliggende cafe.

Tilmelding foregår her på LinkedIn:
http://events.linkedin.com/Silverlight-Discussion-Meeting/pub/101259


Happy Coding!

Thomas Castøe Martinsen
http://thomasmartinsen.net

Foundation Silverlight 2 Animation

28 Jul

Så kom jeg igennem den første bog i min (5-ugers) ferie. Som den første bog valgte jeg “Foundation Silverlight 2 Animiation” af Jeff Paries.

http://www.bogpriser.dk/work-814-foundation-silverlight-2-animation/?pid=135267502

Det er en udemærket bog om animationer i Silverlight. Specielt syntes jeg, at det er kanon, at bogen primært henvender sig til udviklere, hvorfor langt de fleste animationer også er lavet som metoder i code-behind.

Bogen indeholder mere end 180 eksempler på forskellige animationer og gennemgår alt ligefra et storyboard i xaml til VR i Silverlight.

Alt i alt en fornuftig bog, som jeg nærmest vil kalde obligatorisk læsning, hvis du laver nogle former for animation i Silverlight.

Der er en version 3 på vej, men den er endnu ikke udkommet.

http://www.bogpriser.dk/work-814-foundation-silverlight-3-animation/?pid=135267502


Happy Coding!

Thomas Castøe Martinsen
http://thomasmartinsen.net

Silverlight 3 – Sådan bruger du Out-of-Browser

14 Jul

En af de nye mange features i Silverlight 3 er muligheden for at køre out-of-browser. Helt bogstaveligt betyder of-out-browser, at du får mulighed for at afvikle din Silverlight applikation udenfor browseren som en selvstændig applikation.

For at enable muligheden for at køre out-of-browser, skal du starte lave et nyt Silverlight 3 projekt. I de tidligere beta udgaver af Silverlight 3 skulle man som udvikler selv tilpasse AppManifest.xml-filen for at enable out-of-browser. I den endelige udgave, er det blevet en del af egenskaberne for projektet.

Under “Silverlight build options” på den første fane under projektets egenskaber, skal du vælge “Enable running application out of the browser”.

 Enable running application out of the browser

Når det er gjort er du som sådan klar til at køre din Silverlight applikation out-of-browser. Du har dog mulighed for at sætte nogle yderligere settings, såsom titlen på din applikation, ikoner mv. Det gør du ved at klikke på “knappen “Out-of-Browser Settings”.

2009-07-14_115235

Kører du din applikation nu i browser og højreklikker, vil du se at du har fået mulighed for, at installere din applikation på din computer.

2009-07-14_115435

Vælger du at installere applikationen, får du mulighed for at bestemme om der skal placeres et shortcut i startmenuen og/eller på skrivebordet.

2009-07-14_115626

Når det er gjort, har du mulighed for, at starte din Silverlight applikation direkte fra din startmenu eller fra skrivebordet uden at du behøver åbne en browser  først.

2009-07-14_120248

Det dér reelt sker når du vælger at installere din Silverlight applikation er, at den XAP fil, der udgør applikationen, bliver placeret lokalt på computeren. Som en del af Silverlight runtime installationen, installeres også en applikation kaldet sllauncher – det er den der hoster Silverlight applikationen når den kører out-of-browser.

2009-07-14_140247

Når Silverlight applikationen bliver installeret lokalt, bliver der også gemt et timestamp for installationen. Når applikationen bliver startet bliver XAP-filen synkroniseret med serveren såfremt der er internet forbindelse – ligger der en nyere XAP-fil på serveren bliver den automatisk hentet ned og så er det den der bliver startet op.

Vil du afinstallere applikationen igen, højreklikker du blot på applikationen og vælger “Uninstall”.

2009-07-14_155635

Specielt LOB applikationer vil kunne drage nytte af muligheden for at køre out-of-browser. Mange der sidder og anvender WinForms applikationer i dag, er vant til at arbejde “direkte” i en applikation uden at skulle igennem en browser først.


Happy Coding!
Thomas Castøe Martinsen
http://thomasmartinsen.net

Silverlight 3 released

10 Jul

Silverlight 3 has been released here are some of the released links:

Silverlight 3 Runtime
http://www.microsoft.com/silverlight/resources/install.aspx

Blend 3 with Sketchflow
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=92e1db7a-5d36-449b-8c6b-d25f078f3609

SDK
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=2050e580-f1d5-4040-bb09-e6185591b6b5

VS 2008 Tools
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=9442b0f2-7465-417a-88f3-5e7b5409e9dd

.NET RIA Services (July 2009)
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce

Happy Coding!
Thomas Martinsen
http://thomasmartinsen.net

Follow

Get every new post delivered to your Inbox.

Join 1,413 other followers