ARCHITECTArchitect AcademyFoundationsInsidersMCPtréningekvizsgákgyakorlatprojektek Novák István eEvangelist – „Dive deeper” Grepton Zrt. Technológiai vezető
ARCHITECT Academy Foundations Bemutatni a.NET keretrendszer legfontosabb technológiai é.s elvi alapjait Bemutatni, hol áll a.NET keretrendszer ma és hová tart a közeli jövőben Segítséget nyújtani.NET technológiára épülő fejlesztési projektek kialakításához, irányításához
ARCHITECT Academy Foundations 1.A világ és fejlesztések a.NET előtt 2.A.NET keretrendszer céljai 3.A.NET futtatókörnyezet 4.A.NET fontos rétegei, elemei 5.Architektúra elemek a.NET-ben 6.Adatelérési technológiák 7.Kérdések, válaszok
ARCHITECT Academy Foundations Alkalmazások változatos fejlesztőeszközökkel készülnek Monolit alkalmazások Kliens-szerver alkalmazások Többrétegű alkalmazások Szolgáltatásalapú rendszerek Uralkodó kliens operációs rendszer: Windows Több szerver oldali rendszerszoftver
ARCHITECT Academy Foundations Különböző programozási nyelvek C, C++, VB, Delphi (Turbo Pascal), Object Builder Különböző futásidejű könyvtárak Microsoft Foundation Classes (MFC) Active Template Library (ATL) Borland Visual Component Library (VCL) Msvbvm60.dll (Visual Basic) Különböző IPC mechanizmusok RPC, WinSocket MTS, COM, COM+, DCOM HTTP „.DLL-Hell” jelenség
Windows API-k (User.exe, GDI.exe, Kernel32.dll, netapi32.dll, stb.) Windows API-k (User.exe, GDI.exe, Kernel32.dll, netapi32.dll, stb.) Delphi App 2 VCL Delphi App 1 VCL VB App MFC runtime VB runtime Common Controls MFC App 2 MFC App 1 MFC runtime
Üzleti funkciók (30%) Infrastruktúra kód (70%) Erőforrás ráfordítás általában
ARCHITECT Academy Foundations Alkalmazásfejlesztési keretrendszerek 1996: Java J2EE 2000:.NET Önállóan fejlődtek, „inspirálták egymást” Melyik a jobb? Ebben a formában értelmetlen a kérdés... Jelen, várható jövő: Minden nagyvállalatnál mindkét technológiának megvan a helye Nem a homogenizálás a cél, hanem az együttműködés A két technológia folyamatosan javítja a másikkal való együttműködést
Üzleti funkciók (30%) Infrastruktúra kód (70%) Erőforrás ráfordítás általában Erőforrás ráfordítás keretrendszer alkalmazásával Üzleti funkciók (70%) Infrastruktúra kód (30%) Erőforrás ráfordítás (keretrendszer, kitöltött időkeret) Infrastruktúra kód (30%) Üzleti funkciók (70%)
FuttatókörnyezetÉpítőelemek Hatékonyságjavító eszközök Fejlesztési életciklus kezelése
.NET változatMegjelenés 1.0 Beta november 1.0 Beta június 1.0 SP március 1.0 SP augusztus 1.0 SP augusztus 1.1 SP március 2.0 SP november SP12008 Q2
Common Language Runtime Base class library Security, Soap 1.2, XML, Generic collections, I/O, stb. Architektúra szolgáltatások ASP.NET v1.0 WinForms 1.0
Felügyelt kód [ managed code ]: az operációs rendszer szolgáltatásait kizárólag a.NET futtatókörnyezeten keresztül veszi igénybe. „Flat” API helyett objektumok: Egyértelmű paraméterek Elfelejthetjük a „Handle”-t „buffer overrun” elkerülése Típusbiztonság (lebegőpontos szám helyén nem lesz string...) Windows API-k (User.exe, GDI.exe, Kernel32.dll, netapi32.dll, stb.) Windows API-k (User.exe, GDI.exe, Kernel32.dll, netapi32.dll, stb.).NET alkalmazás.NET alkalmazásmotor (mscoree.dll).NET alkalmazásmotor (mscoree.dll) Felhasználói.NET objektumok.NET alapobjektum- könyvtár
.NET alkalmazásmotor.NET forráskód (C#, VB.NET, stb.).NET forráskód (C#, VB.NET, stb.).NET fordítóprogram.DLL vagy.EXE assembly (MSIL és metaadat).DLL vagy.EXE assembly (MSIL és metaadat) Class Loader Jitter Gépi kódú utasítás Gépi kódú utasítás Végrehajtás Windows API-k (User.exe, GDI.exe, Kernel32.dll, netapi32.dll, stb.) Windows API-k (User.exe, GDI.exe, Kernel32.dll, netapi32.dll, stb.)
ARCHITECT Academy Foundations static void Main(string[] args) { int result = 1; for (int i = 1; i <= 5; i++) result *= i; Console.WriteLine("5! = {0}", result); } A programot lefordítjuk Az ILDASM (MSIL Disassembler) megvizsgáljuk az MSIL kódot Megnézzük a futás közben előálló (JIT) gépi kódot
// Lokális változók.locals init ([0] int32 result, [1] int32 i) // result = 1; IL_0000: ldc.i4.1 IL_0001: stloc.0 // for (int i = 1; i <=5; i++) IL_0002: ldc.i4.1 IL_0003: stloc.1 IL_0004: br.s IL_000e // result *= i; IL_0006: ldloc.0 IL_0007: ldloc.1 IL_0008: mul IL_0009: stloc.0
// for (int i = 1; i <=5; i++) IL_000a: ldloc.1 IL_000b: ldc.i4.1 IL_000c: add IL_000d: stloc.1 // for (int i = 1; i <=5; i++) IL_000e: ldloc.1 IL_000f: ldc.i4.5 IL_0010: ble.s IL_0006 // Console.WriteLine(„5! = {0}”, result); IL_0012: ldstr "5! = {0}" IL_0017: ldloc.0 IL_0018: box [mscorlib]System.Int32 IL_001d: call void [mscorlib]System.Console::WriteLine(string, object)
// int result = 1; mov ebx,1 // for (int i = 1; i <= 5; i++) mov dword ptr [ebp-44h], f nop jmp D // result *= i; mov eax,dword ptr [ebp-44h] imul eax,ebx mov ebx,eax // for (int i = 1; i <= 5; i++) a inc dword ptr [ebp-44h] d cmp dword ptr [ebp-44h], setle al movzx eax,al mov dword ptr [ebp-48h],eax a cmp dword ptr [ebp-48h], e jne
Common Language Runtime (CLR) Common Type System (CTS) Common Language Specification (CLS) Base Class Library (Infrastruktúra szolgáltatások) Biztonság XML/SOAP Konfiguráció Nyomkövetés Biztonság Többszálúság Fájlkezelés Konténerek Diagnosztika P/Invoke... Architektúra szolgáltatások ASP.NET/Webszolgáltatások ADO.NET/Entity Framework WinForms WF WCF WPF CardSpace...
Érték: a típust a memóriában lévő bitsorozat írja le (pl. Int32) Referencia: a típust a bitsorozat helyére vonatkozó referencia azonosítja be (pl. String) :44:23 (&Customer) 42 true (&String) Color.AliceBlue Kovács Mihály Hello, World (&String) Kiértékelési verem [ evaluation stack ] Felügyelt blokk [ managed heap ]
ARCHITECT Academy Foundations Felsorolt (enum) típusok Önálló érték, bitkombináció Struktúra (C, C++, VB, Delphi szemantika) Primitív (CLR által kezelt) típusok Boolean Byte, Sbyte, Char Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal
Primitív (CLR által kezelt) típusok: System.Object System.String „Boxing”: Érték típus Referencia típus „Unboxing”: Referencia típus Érték típus System.Object System.ValueType Érték típusok Referencia típusok
ARCHITECT Academy Foundations Class: Legfontosabb típus, az OOP alapja Láthatóság: private, public, protected, internal Absztrakció: absztrakt/konkrét Lezártság: nyitott/ lezárt [ sealed ] Öröklés: egy alaposztály, 0, 1 vagy több interfész Elemei: Mező [ field ] Metódus [ method ] Tulajdonság [ property ] Esemény [ event ]
Interface: absztrakt metódusok, tulajdonságok és események gyűjteménye Nem származnak le egyetlen típusból sem Típusok megvalósítják őket (nem öröklik!) Interfész megvalósíthat egy másik interfészt public interface IShapePoints { int PointCount { get; } Point GetPoint(int index); } public struct SingleLine: IShapePoints {... } public IShapeDraw: IShapePoints { void Draw(); }
A.NET eseménykezelésének alapja A C/C++ programozásban megszokott metódusmutató szerepét tölti be Egy időben több metódusra hivatkozhat public delegate void Log(string message);... public static event Log OnLog;... public static void LogToConsole(string message) { Console.WriteLine("{0}: {1}", DateTime.Now, message); } static void Main(string[] args) { OnLog += new Log(LogToConsole); OnLog += new Log(delegate(string message) { Console.WriteLine("TRACE: {1}", DateTime.Now, message); } ); OnLog("Test message"); }
ARCHITECT Academy Foundations Assembly: a legkisebb fizika egység a.NET-ben Lehet:.DLL vagy.EXE Tartalmazhat: futó kódot, erőforrást (pl. képek) Önleíró: tartalmazza a benne foglalt metaadatok leírását saját verzió és hivatkozott szerelvények verziói Nyelvfüggetlen: bármely nyelven készülhet, illetve felhasználható Verziókezelt: Ugyanazon assembly verziói egymás mellett élhetnek! Alkalmazás és rendszerszintű házirendek a verziók kezelésére Biztonságos: Az assembly-k aláírással láthatók el Hozzáférési házirendek, jogosultságok definiálhatók
ARCHITECT Academy Foundations Telepítés: XCOPY, egyszerű másolás Felhasználási szándék: Privát szerelvény: egy konkrét alkalmazás használja Osztott szerelvény: több alkalmazás közösen használja GAC: Global Assembly Cache Az osztott szerelvények tára Több verziót tárol (verziószám, lokalizáció) Szerelvények betöltése Exact, nyomon követhető mechanizmus Házirendekkel, konfigurációval befolyásolható
Megjelenítés Üzleti logika Adatelérés Adatok Adatbázis Szolgáltatás Adatelérés (Data Access) Adatelérés (Data Access) Szolgáltatás elérés (Service Agent) Szolgáltatás elérés (Service Agent) Entitások Szolgáltatás objektumok Szolgáltatás objektumok Munkafolyamatok Üzleti szolgáltatások homlokzata Felhasználói felület folyamatok Felhasználói felület elemek Infrastruktúra réteg (Diagnosztika, kommunikáció, security, utility) Infrastruktúra réteg (Diagnosztika, kommunikáció, security, utility)
Kompozit szolgáltatás Szolgáltatás 1 Homlokzat 1 Szolgáltatás 2 Homlokzat 2 Szolgáltatás elérés 1 Szolgáltatás elérés 2 Szolgáltatás logikája Szolgáltatás homlokzata Szolgáltatás fogyasztó (Service Agent) Szolgáltatás fogyasztó (Service Agent) Szolgáltatás fogyasztó (Megjelenítés réteg) Szolgáltatás fogyasztó (Megjelenítés réteg)
Adatbázis 1 Adatbázis 2 Szolgáltatás 1 Szolgáltatás logikája Terheléselosztás Megjelenítés (Web) Web farm Megjelenítés (vastag kliens) Megjelenítés (vastag kliens) Megjelenítés (vastag kliens) Megjelenítés (vastag kliens)
ARCHITECT Academy Foundations Milyen szoftver rétegeket használok? Milyen rétegeket „olvasztok” össze más rétegekkel Egy logikai komponensbe Egy fizikai komponensbe Hogyan oldom meg a komponensek kommunikációját? Egyéb nem minőségi elvárások: Teljesítmény Skálázhatóság Hibatűrés Tesztelhetőség Stb.
Monolit alkalmazás: Egyetlen.EXE? Egybemosott rétegek? Adatbázis Szolgáltatás Adatelérés (Data Access) Adatelérés (Data Access) Szolgáltatás elérés (Service Agent) Szolgáltatás elérés (Service Agent) Entitások Szolgáltatás objektumok Szolgáltatás objektumok Munkafolyamatok Üzleti szolgáltatások homlokzata Felhasználói felület folyamatok Felhasználói felület elemek Infrastruktúra réteg (Diagnosztika, kommunikáció, security, utility) Infrastruktúra réteg (Diagnosztika, kommunikáció, security, utility)
Elosztott alkalmazás: Több fizikai komponens? Jól határolt rétegek? Adatbázis Szolgáltatás Adatelérés (Data Access) Adatelérés (Data Access) Szolgáltatás elérés (Service Agent) Szolgáltatás elérés (Service Agent) Entitások Szolgáltatás objektumok Szolgáltatás objektumok Munkafolyamatok Üzleti szolgáltatások homlokzata Felhasználói felület folyamatok Felhasználói felület elemek Infrastruktúra réteg (Diagnosztika, kommunikáció, security, utility) Infrastruktúra réteg (Diagnosztika, kommunikáció, security, utility)
Adatbázis SQL Server 2005 CLR integráció SQL Server 2008 Adatelérés réteg (Data Access) ADO.NET v1.0ADO.NET v2.0 TransactionScope SQL Server 2005 XML adattípus, felhasználói típusok Szolgáltatás elérés (Service Agent), Üzleti homlokzat HTTP, TCP.NET Remoting SOAP webservice Message Queue WS Extensions
Üzleti entitások Common Type System.NET Generics Szolgáltatás objektumok Munkafolyamatok
Felhasználói felület elemek ASP.NET v1.0ASP.NET v2.0 WinForms v1.0WinForms v2.0 Felhasználói felület folyamatok
.NET Framework Data Providers Data Sources SQL Server OracleOracle Other SQL ISAMISAM ODBCODBC Native SQL Server Native Oracle Provider for OLEDB Provider for ODBC
DataSetDataSet DataTableCollectionDataTableCollection.NET Framework Data Provider ConnectionConnection TransactionTransaction CommandCommand ParametersParameters DataReaderDataReader DataAdapterDataAdapter SelectCommandSelectCommand InsertCommandInsertCommand UpdateCommandUpdateCommand DeleteCommandDeleteCommand DataTableDataTable DataRowCollectionDataRowCollection DataColumnCollectionDataColumnCollection ConstraintCollectionConstraintCollection DataRelationCollectionDataRelationCollection DatabaseDatabase
Adattábla 1 Adattábla N Adattábla 3 Adattábla 2 Mapping 1 Mapping 2 Entitásséma 1 Entitásséma 2
ARCHITECT Acadey Foundations Absztrakció az adatbázis logikai modellje felett: koncepcionális modell Object-Relational Mapping Entity Data Model Entitások Relációk Schema Definition Language Entity SQL
ARCHITECT Acadey Foundations Language Integrated Query Natív adatlekérdezési lehetőség a.NET keretredszerhez Run-time: elérhető a.NET 2.0-ban is.NET 3.0/3.5: erős nyelvi támogatás Általános adatelérési mechanizmus Standard Query Operators „Halasztott” végrehajtás Végrehajtás LINQ provider-eken keresztül
ARCHITECT Acadey Foundations LINQ to Objects: memóriaobjektumok LINQ to XML: XML információk LINQ to SQL: SQL Server LINQ to Datasets: ADO.NET DataSet-ek LINQ to Data Services: ADO.NET DS LINQ to Entities: Entity Framework PLINQ LINQ 4 SPS (L&M Solutions)
ARCHITECT Academy Foundations A.NET keretrendszer alapvetően megváltoztatja azt, ahogyan alkalmazásaink az operációs rendszer szolgáltatásait használják Fókusz: Erőforrásfelhasználás hatékonysága Infrastruktúra funkciók Üzleti funkciók A.NET folyamatosan fejlődik Erősődőben az architektúra szolgáltatások.NET v3.5 Adat és információkezelés új korszaka kezdődik
ARCHITECT Academy Foundations
© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.