Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

Introduzione a .NET - Seconda parte

Introduzione a .NET - Seconda parte

Una velocissima introduzione ai componenti principali del framework .NET (WPF, WCF, WF e LINQ), al refactoring con Resharper di JetBrains e agli IDE Visual Studio e Expression Blend per la scrittura di codice e di interfacce grafiche.

Le slide sono state usate nel corso di una talk organizzata per Trenta3dev a Trento: https://github.com/trenta3dev.

Il codice usato per la demo si trova a questo link: http://code.msdn.microsoft.com/wpapps/Contact-Manager-Web-API-0e8e373d.

Avatar for Michele Di Cosmo

Michele Di Cosmo

January 16, 2013
Tweet

Other Decks in Programming

Transcript

  1. Componenti principali del framework .NET WPF: Windows Presentation Foundation WCF:

    Windows Communication Foundation WF: Workflow Foundation LINQ: Language INtegrated Query Cosa vedremo / 1
  2. Dimostrazione di un’App Windows RunTime (formerly Metro) Expression Blend vs

    Visual Studio Refactoring in Visual Studio con JetBrains Resharper Cosa vedremo / 2
  3. Una sessione di debugging in Visual Studio Riscrittura della demo

    da WinRT a Windows Phone Cosa vedremo / 3
  4. •  GDI (simile a Xlib) vs DirectX. •  Imperativo vs

    Dichiarativo (XML). •  Tutto via codice vs Layer UI indipendente. •  Supporto a template e ereditarieta’. •  Supporto a grafica vettoriale, 3D, proiezioni e data bindings. •  Silverlight: un subset di WPF per il web e Windows Phone. •  Metro: WPF, ma anche HTML5+JS o C++ Componenti principali / WPF
  5. Componenti principali / WPF / Esempio <common:LayoutAwarePage x:Name="pageRoot" x:Class="WinRTApp.GroupedItemsPage" DataContext="{Binding

    DefaultViewModel, RelativeSource={RelativeSource Self}}“ ...> <GridView ...> <GridView.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </GridView.ItemsPanel> <GridView.GroupStyle> <GroupStyle> <GroupStyle.HeaderTemplate> <DataTemplate> <Grid Margin="1,0,0,6"> <Button AutomationProperties.Name="Group Title" Click="Header_Click" Style="{StaticResource TextPrimaryButtonStyle}" > <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Title}" Margin="3,-7,10,10" Style="{StaticResource GroupHeaderTextStyle}" /> <TextBlock Text="{StaticResource ChevronGlyph}" FontFamily="Segoe UI Symbol" Margin="0,-7,0,10" Style="{StaticResource GroupHeaderTextStyle}"/> </StackPanel> </Button> </Grid> </DataTemplate> </GroupStyle.HeaderTemplate> <GroupStyle.Panel> <ItemsPanelTemplate> <VariableSizedWrapGrid Orientation="Vertical" Margin="0,0,80,0"/> </ItemsPanelTemplate> </GroupStyle.Panel> </GroupStyle> </GridView.GroupStyle> </GridView>
  6. Componenti principali / WPF / Esempio <common:LayoutAwarePage x:Name="pageRoot" x:Class="WinRTApp.GroupedItemsPage" DataContext="{Binding

    DefaultViewModel, RelativeSource={RelativeSource Self}}“ ...> <GridView ...> <GridView.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </GridView.ItemsPanel> <GridView.GroupStyle> <GroupStyle> <GroupStyle.HeaderTemplate> <DataTemplate> <Grid Margin="1,0,0,6"> <Button AutomationProperties.Name="Group Title" Click="Header_Click" Style="{StaticResource TextPrimaryButtonStyle}" > <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Title}" Margin="3,-7,10,10" Style="{StaticResource GroupHeaderTextStyle}" /> <TextBlock Text="{StaticResource ChevronGlyph}" FontFamily="Segoe UI Symbol" Margin="0,-7,0,10" Style="{StaticResource GroupHeaderTextStyle}"/> </StackPanel> </Button> </Grid> </DataTemplate> </GroupStyle.HeaderTemplate> <GroupStyle.Panel> <ItemsPanelTemplate> <VariableSizedWrapGrid Orientation="Vertical" Margin="0,0,80,0"/> </ItemsPanelTemplate> </GroupStyle.Panel> </GroupStyle> </GridView.GroupStyle> </GridView>
  7. Componenti principali / WPF / MVVM •  Architectural pattern basato

    su MVC. •  Facilita la divisione fra sviluppo di UI da i layer business e back-end. •  Facilita l’uso dei binding.
  8. Componenti principali / WPF / MVVM layers •  View: Elementi

    grafici, spesso usa binding. •  ViewModel: Una sorta di controller che converte le informazioni del modello in informazioni visualizzabili dalla View (e viceversa). •  Model: Rappresenta i dati, non ha logica. View   ViewModel   Model   XAML   C#,  VB,  F#,  ...   Unit  tests   DB  
  9. Componenti principali / WCF •  Permette la creazione di web

    services •  Contract-driven con interfaccia WSDL •  Estensioni •  WS-Addressing (Informazioni di routing dei messaggi) •  WS-Security (Assicura integrità e confidenzialità) •  Tanti endpoint, definiti da file XML •  Address •  Binding (Specifica il protocollo e le sue proprietà, e.g. SOAP, Message Queues, REST, ...) •  Contract (Definito tramite codice) •  Behaviours (Aggiungono funzionalità, come sicurezza, logging, validazioni, etc...)
  10. Componenti principali / WCF / Esempio servizio using  System;  ...

      namespace  ServiceLibrary   {          [ServiceContract()]          public  interface  IService1          {                  [OperationContract]                  string  MyOperation1(string  myValue);                  [OperationContract]                  string  MyOperation2(DataContract1  dataContractValue);                  [OperationContract]                  string  HelloWorld(string  str);          }            public  class  service1  :  IService1          {                  public  string  MyOperation1(string  myValue)                  {                          return  "Hello:  "  +  myValue;                  }                  public  string  MyOperation2(DataContract1  dataContractValue)                  {                          return  "Hello:  "  +  dataContractValue.FirstName;                  }                  public  string  HelloWorld(string  str)                  {                          return  "Helloworld  from  "  +  str;                  }          }          [DataContract]          public  class  DataContract1          {                  string  firstName;                  string  lastName;                    [DataMember]                  public  string  FirstName                  {                          get  {  return  firstName;  }                          set  {  firstName  =  value;  }                  }                  [DataMember]                  public  string  LastName                  {                          get  {  return  lastName;  }                          set  {  lastName  =  value;  }                  }          }   }  
  11. Componenti principali / WCF / Esempio endpoint  <system.serviceModel>    

         ...          <services>                    <service  name="ServiceLibrary.service1">                        <endpoint  contract="ServiceLibrary.IService1"  binding="wsHttpBinding"/>                    </service>                </services>          </system.serviceModel>          ...    </system.serviceModel>    
  12. •  Workflow engine. •  Un workflow è composto da Activities

    (e.g. Lettura di un file, Output a console). •  Supporto di strutture If, Try-Catch, .... •  Designer grafico riusabile nelle proprie applicazioni. Componenti principali / WF
  13. •  Workflow engine. •  Un workflow è composto da Activities

    (e.g. Lettura di un file, Output a console). •  Supporto di strutture If, Try-Catch, .... •  Designer grafico riusabile nelle proprie applicazioni. Componenti principali / WF
  14. •  Si pronuncia link. •  Estende il linguaggio (C#, VB.NET,

    etc…) con le query expressions. (Usando extension methods) •  Permette di estrarre dati da array, liste, oggetti enumerabili (IEnumerable), database relazionali e non. •  E’ lazy. (Implementa IEnumerable) •  Permette creazione di query sul DB: IQueryable. •  E’ puro: non modifica gli oggetti. Componenti principali / LINQ
  15. •  LINQ to Objects •  LINQ to XML •  LINQ

    to SQL •  LINQ to Entities, NHibernate, MySQL, PostgreSQL, Oracle, SQLite, ... •  LINQ to CSV •  LINQ to Twitter, Wikipedia, ... Componenti principali / LINQ / Providers
  16. Componenti principali / LINQ / Esempio 1 Ispirato a SQL

    var  results  =      from  c  in  SomeCollection      where  c.SomeProperty  <  10      select  new  {  c.SomeProperty,  c.OtherProperty  };     foreach  (var  result  in  results)   {          Console.WriteLine(result);   }   Anonymous  types   Type  inference  
  17. Componenti principali / LINQ / Esempio 2 Ispirato a SQL

    var  results  =      SomeCollection          .Where(c  =>  c.SomeProperty  <  10)          .Select(c  =>  new  {c.SomeProperty,                                              c.OtherProperty});   foreach  (var  result  in  results)   {          Console.WriteLine(result);   }   …e a Haskell Lambda  expressions   High-­‐order  funcEons  
  18. DEMO UI con Blend per WinRT Code Behind con VS

    Refactoring del codice Debugging del codice Porting in Windows Phone