ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 28
Abonament PDF

vNext: Viitoarea direcție a aplicațiilor .NET

Claudiu Mera
Software Developer
@Endava



PROGRAMARE


În ultimii ani s-au putut observa schimbări majore ale principiilor care stau la baza dezvoltării de software: un ritm rapid al inovației și al lansării de aplicații, accentul pus pe strategii de dezvoltare pentru multiple dispozitive, respectiv colaborarea din cadrul comunităților de dezvoltatori bazată tot mai mult pe open source. La acestea se adaugă și nevoia dezvoltatorilor de a integra aplicațiilor vechi la noi tehnologii. Microsoft a încercat să găsească un răspuns la toate aceste cerințe prin stabilirea unei noi direcții a framework-ului său binecunoscut .NET, direcție care poartă numele generic vNext.

Ce este vNext?

În cadrul conferinței TechEd de anul acesta, Microsoft a prezentat viitoarea versiune a framework-ului .NET intitulată vNext, care a evoluat ca o soluție firească înspre a acomoda toate cerințele actuale ale dezvoltatorilor. Mai exact, se dorește ca toate schimbările să aducă modul de realizare al aplicațiilor la un alt nivel.

vNext însumează o serie de modificări aduse platformei .NET. Acestea implică: modularizare ridicată, tranziție ușoară a aplicațiilor către cloud, facilitarea contribuțiilor la framework prin cod open source, un ciclu rapid de dezvoltare, libera alegere a tool-urilor de programare, și nu în ultimul rând libera alegere a platformei pe care pot rula aplicațiile. În acest context, întrebările pe care mulți și le adresează sunt cum se concretizează mai exact vNext în cadrul procesului de dezvoltare și ce facilități aduce acesta la nivelul tool-urilor?

Modularizarea completă a referințelor

Una dintre modificările majore aduse platformei .NET este modularizarea totală. Până acum, era necesară instalarea globală a framework-ului .NET pe mașina pe care trebuiau rulate aplicațiile. Aceasta presupune alocarea unui spațiu mărit pe disc. De asemenea, apar probleme în cazul în care se dorește rularea unei aplicații cu o altă versiune de .NET decât cea existentă, aceasta presupunând schimbarea versiunii globale a framework-ului pe mașina respectivă, lucru care poate afecta toate programele existente. Toate acestea duc la un timp sporit pentru setarea aplicațiilor pe un anumit mediu.

vNext aduce organizarea funcționalităților sub forma de pachete. Așadar, toate dependențele unei aplicații (inclusiv framework-ul, Common Language Runtime) sunt constituite ca pachete Nuget care se desfășoară simultan cu aplicația. De asemenea, pentru a optimiza resursele aplicațiilor cloud, Microsoft a decis separarea framework-ului în două variante: una pentru soluțiile on-premise, respectiv una pentru aplicații cloud. Varianta vNext optimizată pentru cloud conține doar acele resurse care sunt strict necesare pentru desfășurarea unei aplicații în cloud și nimic altceva. Așadar, această variantă a framework-ului nu conține referințele necesare pentru Windows Forms sau Windows Presentation Foundation.

Modularizarea framework-ului se reflectă în următoarea versiune a IDE-ului Visual Studio care aduce un nou mod de structurare a soluțiilor. S-a renunțat la listarea referințelor în forma lineară; acum, acestea sunt dispuse în formă arborescentă astfel încât să ofere o imagine mult mai clară asupra dependențelor, fie ele pachete Nuget sau librării de clase. De asemenea, dacă optăm pentru o aplicație web, primul lucru care se poate observa în IDE este absența fișierului Web.config. Pe de altă parte, s-a introdus un nou fișier denumit project.json care este prezent pentru toate tipurile de proiecte. Fișierul project.json joaca un rol esențial în configurarea aplicațiilor vNext. Acesta conține lista de dependențe ale proiectului, definirea de comenzi custom, respectiv setări pentru diverse configurații. Visual Studio oferă suport Intellisense pentru editarea acestui fișier și pentru căutarea referințelor. De asemenea, dependențele specificate în fișier se sincronizează în timp real cu arborele de referințe vizibil în Solution Explorer.

"dependencies": {
    "EntityFramework.SqlServer": "7.0.0",
    "Microsoft.AspNet.Mvc": "6.0.0",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0",
    "Microsoft.AspNet.Identity.Authentication": "3.0.0",
    "Microsoft.AspNet.Security.Cookies": "1.0.0",
    "Microsoft.AspNet.Server.IIS": "1.0.0-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-*",
    "Microsoft.AspNet.StaticFiles": "1.0.0",
    "Microsoft.Framework.ConfigurationModel.Json": "1.0.0",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0-*",
    "UserManagement.BusinessLogic": ""
},

"commands": {        
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"
},

"configurations": {
    "net451" : { },
    "k10" : { }
}

Fișierul json reprezintă o resursă extrem de puternică. Dezvoltatorul poate opta fie pentru o anumită versiune a unui pachet, fie pentru ultima versiune. Acest lucru se dovedește foarte util, deoarece se pot încărca în proiect cele mai noi versiuni ale pachetelor care conțin de multe ori fixuri pentru buguri din versiunile precedente. Mai mult decât atât, dacă se depistează bug-uri în cadrul unor pachete open source, acestea pot fi clonate pe mașina locală, fixate, pentru ca apoi referințele lor din pachet să poată fi actualizate pentru a indica noua versiune ce conține fixurile.

Pe lângă specificarea dependențelor, fișierul project.json poate fi folosit pentru reconstituirea completă a soluției în Visual Studio, în cazul ștergerii accidentale a fișierelor .proj din aplicație.

Control sporit prin Dependency Injection

Viitoarea direcție a framework-ului .NET aduce în prim plan conceptul de Dependency Injection, care devine un mecanism built in de setare a aplicațiilor. Aceasta configurare se realizează în clasa Startup, în cadrul metodei Configure, ilustrată mai jos:

public void Configure(IBuilder app)
{
    // Setup configuration sources
    var configuration = new Configuration();
    configuration.AddJsonFile("config.json");
    configuration.AddEnvironmentVariables();
    string connString = configuration.Get("Data:DefaultConnection:ConnectionString");
    // Set up application services
    app.UseServices(services =>
    {
        // Add EF services to the services container
        services.AddEntityFramework().AddSqlServer();

        // Configure DbContext
        services.SetupOptions<DbContextOptions>(options =>
        {                    options.UseSqlServer(configuration.Get("Data:DefaultConnection:ConnectionString"));
        });               
        // Add Identity services to the services container
        services.AddIdentity<ApplicationUser>()
            .AddEntityFramework<ApplicationUser, ApplicationDbContext>()
            .AddHttpSignIn();
        // Add MVC services to the services container
        services.AddMvc();
    });

    // Add MVC to the request pipeline
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default", 
            template: "{controller}/{action}/{id?}",
            defaults: new { controller = "Home", action = "Index" });

        routes.MapRoute(
            name: "api",
            template: "{controller}/{id?}");
    });
}

Așa cum se poate observa, se oferă un control sporit și se permite setarea explicită doar a funcționalităților necesare. Este foarte important ca serviciile folosite să fie înregistrate în fișierul de configurare json. În secțiunea precedentă s-a menționat lipsa fișierului Web.config din aplicațiile web. Aceasta se datorează faptului că developer-ul are posibilitatea de a alege propriul mod de specificare a configurației: prin fișiere xml, json sau ini. Bineînțeles, acest lucru se realizează tot în cadrul metodei Configure, prin setarea fișierului ales ca referință în cadrul obiectului configuration.

Tot în această metodă, se specifică dacă se dorește includerea Entity Framework sau MVC în proiect, de exemplu. Aceasta se face prin apelarea metodelor de forma AddEntityFramework sau AddMvc. Mai mult decât atât, se pot seta anumiți parametri ale funcționalităților incluse (prin metodele de forma UseEntityFramework sau UseMvc), cum ar fi configurarea rutelor în MVC.

Cu toate că există multe mecanisme 3rd party pentru dependency injection în .NET (Autofac, NInject), se oferă de acum și suport built in pentru aceasta, ceea ce permite un control mult mai granular al serviciilor foloste în cadrul aplicației. În cazul în care se dorește folosirea unui container 3rd party pentru Dependency Injection, se poate realiza asta prin specificarea dependenței în project.json urmată de setarea explicită a parametrilor în metoda Configure.

Rapiditate și performanță

Un alt avantaj important care este inclus în aplicațiile vNext și nu numai este compilarea dinamică. Noua platforma de compilatoare .NET cunoscută sub numele Roslyn, oferă un API public open-source. Având la îndemână API-urile compilatoarelor .NET, dezvoltatorii pot crea de acum mai ușor aplicații pentru analiza codului, diagnosticări customizate inclusiv versiuni optimizate de compilatoare.

Din moment ce are loc în memoria sistemului și nu presupune rescrierea assembly-urilor pe disc, compilarea dinamică aduce un spor de performanță execuției unui program. Așadar, odată ce este pornit procesul aplicației, se poate edita codul sursă și doar prin simpla sa salvare, putem vedea modificările făcute în timp real. De remarcat este faptul că nu e necesar pasul de rebuild al programului, care necesită timp și resurse, ci doar salvarea fișierelor modificate. De exemplu, cei care creează o aplicație web trebuie doar să editeze codul sursă și să tasteze F5 în browser pentru a-și vedea schimbările propagate. Aceasta duce la un ciclu mult mai rapid al implementării aplicațiilor și al fixărilor de defecte, mărind astfel productivitatea tuturor dezvoltatorilor.

Concluzii

Inovațiile aduse odată cu vNext nu se opresc doar aici. Printre alte noutăți se numără unificarea Web Pages, MVC și Web API într-un singur model, sau suportul îmbunătățit pentru Mono pentru portarea aplicațiilor pe alte platforme. Prin toată această modularizare menționată mai sus și prin controlul sporit, se dorește ca deploierea și mentenanța aplicațiilor să se realizeze mult mai ușor pe orice mediu. Aplicațiile vor putea fi rulate inclusiv de pe mediile portabile cum sunt stickurile de memorie. Mai mult decât atât, aceeași aplicație va putea fi rulată simultan pe versiuni diferite ale framework-ului.

Nu în ultimul rând, vNext marchează intrarea framework-ului .NET într-o noua eră, una care permite libertatea deplină a dezvoltatorilor de a-și alege propriile tool-uri și sisteme de operare. Fiind open-source, toată comunitatea are mereu acces la ultimele funcționalități ale vNext, iar dezvoltarea acestuia se realizează printr-un proces de feedback continuu. Viitoarea versiune a framework-ului .NET promite că va revoluționa procesul de implementare, iar nouă nu ne rămâne decât să așteptam lansarea sa oficială pentru a explora toate facilitățile oferite de acesta.

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects