Programmēšana

Kā programmēt, izmantojot PostSharp C #

Uz aspektu orientēta programmēšana (AOP) ir programmēšanas paradigma, kas ļauj definēt politikas, lai vienmērīgi pārvaldītu transversālās problēmas lietojumprogrammās. AOP var izmantot, lai noņemtu sajauktu kodu, uzrakstītu tīrāku kodu, palielinātu koda abstrakciju un modularitāti, samazinātu uzturēšanas un izstrādes izmaksas, kā arī padarītu lietojumprogrammas vieglāk pārvaldāmas un elastīgas. PostSharp ir viens no populārākajiem pieejamajiem rīkiem, ko var izmantot AOP ieviešanai lietojumprogrammās.

Darba sākšana

Lai sāktu lietot PostSharp, ieteicams instalēt jaunāko stabilo laidienu, izmantojot Package Manager Console. Alternatīvi, jūs varat instalēt PostSharp, izmantojot logu "Pārvaldīt NuGet paketes". Lai sāktu lietot PostSharp savā lietojumprogrammā, rīkojieties šādi.

1. Atveriet Visual Studio 2015.

2. Izvēlnē Visual Studio noklikšķiniet uz Fails> Jauns> Projekts.

3. Parādīto projekta veidņu sarakstā atlasiet Console Application veidni.

4. Saglabājiet jauno konsoles lietojumprogrammas projektu ar nosaukumu.

5. Izvēlnē Visual Studio noklikšķiniet uz Rīki> NuGet Package Manager> Pārvaldīt NuGet Packages for Solution.

6. Meklējiet jaunāko stabilo PostSharp laidienu un noklikšķiniet uz Instalēt.

Un pagaidām tas ir viss, kas jums jādara. Kad tiek parādīts uzaicinājums, atlasiet projektu (-us), kurā vēlaties instalēt PostSharp, un noklikšķiniet uz Labi. Kad instalēšana ir pabeigta, esat gatavs lietot PostSharp savā lietojumprogrammā.

Programmēšana PostSharp

Kad PostSharp ir instalēts, varat sākt to lietot savā lietojumprogrammā. Lai to izdarītu, jums būs jāizveido viens vai vairāki aspekti, ko lietotne varēs izmantot. Viens no veidiem, kā ieviest AOP lietojumprogrammās, ir atribūtu izmantošana. Kad jūsu aspekts ir definēts, jūs vēlaties to piemērot savai programmai, izmantojot atribūtus.

Logā Solution Explorer atlasiet savu projektu, ar peles labo pogu noklikšķiniet un pievienojiet jaunu klasi ar nosaukumu ExceptionAspect. Ņemiet vērā, ka aspektam, kas nepieciešams, lai apstrādātu izņēmumus jūsu lietojumprogrammā, būtu jāgūst no bibliotēkas PostSharp OnExceptionAspect klases. OnExceptionAspect ietver metodi ar nosaukumu OnException, kas jums būs jāignorē, lai apstrādātu izņēmumus. Šis kods parāda mūsu pielāgoto izņēmumu aspektu klasi.

[Serializējams]

publiskā klase ExceptionAspect: OnExceptionAspect

    {

publiski ignorēt spēkā neesošu OnException (arguments: MethodExecutionArgs)

        {

Console.WriteLine ("Kļūda radās:" +

DateTime.Now.ToShortTimeString () + "Kļūdas ziņojums:" +

arg. Izņēmums. Ziņojums);

args.FlowBehavior = FlowBehavior.Continue;

bāze.OnException (argumenti);

        }

    }

Katram aspektam jābūt seriālizējamam - ņemiet vērā atribūta [Serializable] izmantošanu iepriekš parādītajā klasē ExceptionAspect. Tagad, kad aspekts ir ieviests, varat to pielietot vienai vai vairākām lietojumprogrammas metodēm, izmantojot atribūtus. Šis koda fragments ilustrē parauga metodi tikko izveidotā izņēmuma aspekta piemērošanai.

[ExceptionAspect]

public static void TestExceptionAspect ()

  {

mest jaunu izņēmumu ("Šis ir testa ziņojums");

  }

Tikko izveidoto pielāgotā izņēmuma aspektu var lietot vienai vai vairākām lietojumprogrammas metodēm - vai pat klases līmenī. Ja aspekts tiek pielietots klases līmenī, tiktu apstrādāti izņēmumi, kas izmesti ar kādu no klases metodēm. PostSharp aspektus var pielietot arī visā montāžā. Šī funkcija ir pazīstama kā Multicast, un to var izmantot mērķa nosaukumvietai, failā AssemblyInfo.cs norādot šādu paziņojumu:

[montāža: ExceptionAspect (AttributeTargetTypes = "PostSharp. *")]

"PostSharp. *" Iepriekš minētajā koda fragmentā attiecas uz visiem veidiem, kas atrodas PostSharp vārdu telpā.

Klase OnMethodBoundaryAspect ļauj izpildīt pielāgotu kodu pirms un pēc metodes izpildes. Kamēr tā OnEntry metode tiek izpildīta pirms metodes, kurai tiek piemērots aspekts, izpildes, OnExit metode tiek izpildīta pēc jūsu metodes izpildes. Šis kodu saraksts parāda, kā jūs varat izmērīt metodes izpildes laiku, izmantojot aspektu. Zemāk esošā ExecutionTimeAspect klase iegūst OnMethodBoundaryAspect klasi un ignorē OnEntry un OnExit metodes.

 [Serializējams]

publiskā klase ExecutionTimeAspect: OnMethodBoundaryAspect

    {

[Neserializēts]

Hronometrs stopwatch;

publiska ignorēšana anulēta OnEntry (arguments: MethodExecutionArgs)

        {

stopWatch = Hronometrs.StartNew ();

bāze.OnEntry (argumenti);

        }

publiski ignorēt anulēto OnExit (arguments: MethodExecutionArgs)

        {

virknes metode = jauna

StackTrace (). GetFrame (1). GetMethod (). Nosaukums;

string message = string.Format ("Metode: [{0}] aizņēma

{1} ms izpildīt. ",

                        metode, stopWatch.ElapsedMilliseconds);

Console.WriteLine (ziņojums);

bāze.OnExit (args);

        }

    }

Varat arī uzlabot iepriekšējo OnExit metodi, lai reģistrētu metožu izpildes laiku. Tagad, kad jūsu aspekts ir gatavs lietošanai, to var izmantot vienai vai vairākām metodēm, lai izgūtu izpildes laiku.

[ExecutionTimeAspect]

public static void TestExceptionAspect ()

{

// Daži kodi

}

Jūs varat uzzināt vairāk par PostSharp, izlasot dokumentāciju.

$config[zx-auto] not found$config[zx-overlay] not found