17
Въведение в Въведение в Aspect Aspect Oriented Oriented Programming (AOP) Programming (AOP) с с .NET .NET Стефан Захариев Стефан Захариев stephan.zahariev[at]gmail.com stephan.zahariev[at]gmail.com NearSoft NearSoft Europe Europe www.nearsoft.c h http://www.devbg.org/patternsc http://www.devbg.org/patternsc ourse/ ourse/ Design Patterns Design Patterns in in C# C#

Въведение в Aspect Oriented Programming (AOP) с .NET

Embed Size (px)

DESCRIPTION

Design Patterns in C#. Въведение в Aspect Oriented Programming (AOP) с .NET. http://www.devbg.org/patternscourse/. Стефан Захариев. stephan.zahariev[at]gmail.com. NearSoft Europe www.nearsoft.ch. Необходими знания. Базови познания за езика C# Познания по ООП - PowerPoint PPT Presentation

Citation preview

Page 1: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Въведение в Въведение в Aspect Aspect Oriented Programming Oriented Programming

(AOP) (AOP) с с .NET.NET

Стефан ЗахариевСтефан ЗахариевСтефан ЗахариевСтефан Захариевstephan.zahariev[at]gmail.comstephan.zahariev[at]gmail.comstephan.zahariev[at]gmail.comstephan.zahariev[at]gmail.com

NearSoft EuropeNearSoft Europewww.nearsoft.chNearSoft EuropeNearSoft Europewww.nearsoft.ch

http://www.devbg.org/patternscourse/http://www.devbg.org/patternscourse/

Design Patterns Design Patterns in in C#C#

Page 2: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Необходими знанияНеобходими знанияНеобходими знанияНеобходими знания

• Базови познания за езика Базови познания за езика C#C#

• Познания по ООППознания по ООП

• Базови познания по Базови познания по UML (UML (клас клас диаграми)диаграми)

• Базови познания за езика Базови познания за езика C#C#

• Познания по ООППознания по ООП

• Базови познания по Базови познания по UML (UML (клас клас диаграми)диаграми)

Page 3: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

СъдържаниеСъдържаниеСъдържаниеСъдържание

• Какво представлява Какво представлява AOPAOP

• AOP AOP и и .NET.NET

• Spring.NETSpring.NET

• ContextBoundObjectContextBoundObject

• Примери използващиПримери използващи AOP AOP

• Какво представлява Какво представлява AOPAOP

• AOP AOP и и .NET.NET

• Spring.NETSpring.NET

• ContextBoundObjectContextBoundObject

• Примери използващиПримери използващи AOP AOP

Page 4: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Какво е Какво е AOP?AOP?Какво е Какво е AOP?AOP?

• Създадено е като концепция през Създадено е като концепция през средата на 90-те в Xerox Palo Alto средата на 90-те в Xerox Palo Alto Research CenterResearch Center

• Има за цел да отдели отделните части Има за цел да отдели отделните части в едно приложение, така че те да не са в едно приложение, така че те да не са зависими една от другазависими една от друга

• Примери:Примери:

• Поддръжка на лог информацияПоддръжка на лог информация

• Управление на транзакциитеУправление на транзакциите

• Създадено е като концепция през Създадено е като концепция през средата на 90-те в Xerox Palo Alto средата на 90-те в Xerox Palo Alto Research CenterResearch Center

• Има за цел да отдели отделните части Има за цел да отдели отделните части в едно приложение, така че те да не са в едно приложение, така че те да не са зависими една от другазависими една от друга

• Примери:Примери:

• Поддръжка на лог информацияПоддръжка на лог информация

• Управление на транзакциитеУправление на транзакциите

Page 5: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Добър ли е този код?Добър ли е този код?Добър ли е този код?Добър ли е този код?

public public doubledouble GetDiscountGetDiscount()(){{ Console.WriteLine(“Console.WriteLine(“Entering GetDiscount()Entering GetDiscount()");");

double discount = mTotalSum * mDiscountPercent / 100;double discount = mTotalSum * mDiscountPercent / 100;

Console.WriteLine(“Console.WriteLine(“Leaving GetDiscount()Leaving GetDiscount()");"); return return discountdiscount;;}}

public void SaveInvoice()public void SaveInvoice(){{ using (TransactionScope ts = new TransactionScope())using (TransactionScope ts = new TransactionScope()) {{ … … SqlCommand saveInvoiceCommand = new SqlCommand();SqlCommand saveInvoiceCommand = new SqlCommand(); … … saveInvoiceCommand.ExecuteNonQuery();saveInvoiceCommand.ExecuteNonQuery(); ts.Complete();ts.Complete(); }}}}

public public doubledouble GetDiscountGetDiscount()(){{ double discount = mTotalSum * mDiscountPercent / 100;double discount = mTotalSum * mDiscountPercent / 100; return return discountdiscount;;}}

public void SaveInvoice()public void SaveInvoice(){{ … … SqlCommand saveInvoiceCommand = new SqlCommand();SqlCommand saveInvoiceCommand = new SqlCommand(); … … saveInvoiceCommand.ExecuteNonQuery();saveInvoiceCommand.ExecuteNonQuery();}}

Page 6: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Как работи Как работи AOPAOPКак работи Как работи AOPAOP

public public doubledouble GetDiscountGetDiscount()(){{ double discount = mTotalSum * mDiscountPercent double discount = mTotalSum * mDiscountPercent

/ 100;/ 100; return return discountdiscount;;}}

public public doubledouble LogGetDiscountLogGetDiscount()(){{ Console.WriteLine(“Console.WriteLine(“Entering GetDiscount()Entering GetDiscount()");");}}

Page 7: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Няколко терминаНяколко терминаНяколко терминаНяколко термина

• Aspect – Aspect – програмен код, който е независимпрограмен код, който е независим• Записване в Записване в log log файлфайл

• JoinpointJoinpoint – точка от изпълнението на програмата, – точка от изпълнението на програмата, където един или няколко аспекта могат да бъдат където един или няколко аспекта могат да бъдат приложениприложени• метод, пропърти, конструкторметод, пропърти, конструктор

• AdviceAdvice – дефинира кога ще се изпълни кода – дефинира кога ще се изпълни кода приложен към даден приложен към даден pointcutpointcut• преди, след, околопреди, след, около

• Pointcut – Pointcut – дефинира група дефинира група joinpointjoinpoint-ове, към които -ове, към които се прилага даден се прилага даден adviceadvice• Всички методи започващи с “Всички методи започващи с “PrintPrint””

• Weaving – Weaving – процеса, при който се интегрират процеса, при който се интегрират аспектите в приложението.аспектите в приложението.

• Aspect – Aspect – програмен код, който е независимпрограмен код, който е независим• Записване в Записване в log log файлфайл

• JoinpointJoinpoint – точка от изпълнението на програмата, – точка от изпълнението на програмата, където един или няколко аспекта могат да бъдат където един или няколко аспекта могат да бъдат приложениприложени• метод, пропърти, конструкторметод, пропърти, конструктор

• AdviceAdvice – дефинира кога ще се изпълни кода – дефинира кога ще се изпълни кода приложен към даден приложен към даден pointcutpointcut• преди, след, околопреди, след, около

• Pointcut – Pointcut – дефинира група дефинира група joinpointjoinpoint-ове, към които -ове, към които се прилага даден се прилага даден adviceadvice• Всички методи започващи с “Всички методи започващи с “PrintPrint””

• Weaving – Weaving – процеса, при който се интегрират процеса, при който се интегрират аспектите в приложението.аспектите в приложението.

Page 8: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Spring.NETSpring.NETSpring.NETSpring.NET

• http://www.springframework.net/http://www.springframework.net/

• Open sourceOpen source

• Първа реализация на Първа реализация на JavaJava

• Поддържа:Поддържа:

• Aspect Oriented ProgrammingAspect Oriented Programming

• Dependency InjectionDependency Injection

• ……

• http://www.springframework.net/http://www.springframework.net/

• Open sourceOpen source

• Първа реализация на Първа реализация на JavaJava

• Поддържа:Поддържа:

• Aspect Oriented ProgrammingAspect Oriented Programming

• Dependency InjectionDependency Injection

• ……

Page 9: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Как работи Как работи Spring.NETSpring.NETКак работи Как работи Spring.NETSpring.NET

+SayHello()

User

+SayHello()

«interface»IUser

UserProxy

Client

UserAdvice

Page 10: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Демонстрация #1Демонстрация #1Демонстрация #1Демонстрация #1

• Hello worldHello world• Hello worldHello world

Page 11: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Демонстрация #Демонстрация #22Демонстрация #Демонстрация #22

• Управление на транзакции с Управление на транзакции с AOPAOP• Управление на транзакции с Управление на транзакции с AOPAOP

Page 12: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

ContextBoundObjectContextBoundObjectContextBoundObjectContextBoundObject

• Стандартен клас за Стандартен клас за .NET Framework.NET Framework

• Как работи?Как работи?

• Стандартен клас за Стандартен клас за .NET Framework.NET Framework

• Как работи?Как работи?

Page 13: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Демонстрация #Демонстрация #33Демонстрация #Демонстрация #33

• AOP AOP чрез чрез ContextBoundObjectContextBoundObject• AOP AOP чрез чрез ContextBoundObjectContextBoundObject

Page 14: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Демонстрация #Демонстрация #44Демонстрация #Демонстрация #44

• Производителност и Производителност и AOPAOP• Производителност и Производителност и AOPAOP

Page 15: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

За и противЗа и противЗа и противЗа и против

• ЗаЗа

• Намалява свързаността на класовете в Намалява свързаността на класовете в приложениетоприложението

• Повишава преизползването на кодПовишава преизползването на код

• ПротивПротив

• Не се поддържа стандартно (Не се поддържа стандартно (.NET .NET и и JavaJava))

• Повишава необходимите знания необходими Повишава необходимите знания необходими на разработчикана разработчика

• Кода не е толкова ясенКода не е толкова ясен

• Затруднено тестванеЗатруднено тестване

• ЗаЗа

• Намалява свързаността на класовете в Намалява свързаността на класовете в приложениетоприложението

• Повишава преизползването на кодПовишава преизползването на код

• ПротивПротив

• Не се поддържа стандартно (Не се поддържа стандартно (.NET .NET и и JavaJava))

• Повишава необходимите знания необходими Повишава необходимите знания необходими на разработчикана разработчика

• Кода не е толкова ясенКода не е толкова ясен

• Затруднено тестванеЗатруднено тестване

Page 16: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

ВръзкиВръзкиВръзкиВръзки

• Aspect Oriented ProgrammingAspect Oriented Programming• http://en.wikipedia.org/wiki/Aspect_oriented_programminghttp://en.wikipedia.org/wiki/Aspect_oriented_programming

• http://aosd.net/http://aosd.net/

• http://www-128.ibm.com/developerworks/rational/library/http://www-128.ibm.com/developerworks/rational/library/2782.html2782.html

• Spring.NETSpring.NET• http://http://www.springframework.net/documentation.htmlwww.springframework.net/documentation.html

• ContextBoundObjectContextBoundObject• http://msdn.microsoft.com/msdnmag/issues/03/03/http://msdn.microsoft.com/msdnmag/issues/03/03/

ContextsinNET/default.aspxContextsinNET/default.aspx

• http://www.codeproject.com/csharp/AspectIntercept.asphttp://www.codeproject.com/csharp/AspectIntercept.asp

• http://www.theserverside.net/tt/articles/content/http://www.theserverside.net/tt/articles/content/AspectOrientingNET/AspectOrientingNET.htmlAspectOrientingNET/AspectOrientingNET.html

• Aspect Oriented ProgrammingAspect Oriented Programming• http://en.wikipedia.org/wiki/Aspect_oriented_programminghttp://en.wikipedia.org/wiki/Aspect_oriented_programming

• http://aosd.net/http://aosd.net/

• http://www-128.ibm.com/developerworks/rational/library/http://www-128.ibm.com/developerworks/rational/library/2782.html2782.html

• Spring.NETSpring.NET• http://http://www.springframework.net/documentation.htmlwww.springframework.net/documentation.html

• ContextBoundObjectContextBoundObject• http://msdn.microsoft.com/msdnmag/issues/03/03/http://msdn.microsoft.com/msdnmag/issues/03/03/

ContextsinNET/default.aspxContextsinNET/default.aspx

• http://www.codeproject.com/csharp/AspectIntercept.asphttp://www.codeproject.com/csharp/AspectIntercept.asp

• http://www.theserverside.net/tt/articles/content/http://www.theserverside.net/tt/articles/content/AspectOrientingNET/AspectOrientingNET.htmlAspectOrientingNET/AspectOrientingNET.html

Page 17: Въведение в  Aspect Oriented Programming (AOP)  с  .NET

Aspect Oriented Aspect Oriented ProgrammingProgrammingAspect Oriented Aspect Oriented ProgrammingProgramming

Въпроси?Въпроси?Въпроси?Въпроси?