Upload
danielle-garcia
View
64
Download
3
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
Въведение в Въведение в 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#
Необходими знанияНеобходими знанияНеобходими знанияНеобходими знания
• Базови познания за езика Базови познания за езика C#C#
• Познания по ООППознания по ООП
• Базови познания по Базови познания по UML (UML (клас клас диаграми)диаграми)
• Базови познания за езика Базови познания за езика C#C#
• Познания по ООППознания по ООП
• Базови познания по Базови познания по UML (UML (клас клас диаграми)диаграми)
СъдържаниеСъдържаниеСъдържаниеСъдържание
• Какво представлява Какво представлява AOPAOP
• AOP AOP и и .NET.NET
• Spring.NETSpring.NET
• ContextBoundObjectContextBoundObject
• Примери използващиПримери използващи AOP AOP
• Какво представлява Какво представлява AOPAOP
• AOP AOP и и .NET.NET
• Spring.NETSpring.NET
• ContextBoundObjectContextBoundObject
• Примери използващиПримери използващи AOP AOP
Какво е Какво е 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
• Има за цел да отдели отделните части Има за цел да отдели отделните части в едно приложение, така че те да не са в едно приложение, така че те да не са зависими една от другазависими една от друга
• Примери:Примери:
• Поддръжка на лог информацияПоддръжка на лог информация
• Управление на транзакциитеУправление на транзакциите
Добър ли е този код?Добър ли е този код?Добър ли е този код?Добър ли е този код?
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();}}
Как работи Как работи 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()");");}}
Няколко терминаНяколко терминаНяколко терминаНяколко термина
• 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 – процеса, при който се интегрират процеса, при който се интегрират аспектите в приложението.аспектите в приложението.
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
• ……
Как работи Как работи Spring.NETSpring.NETКак работи Как работи Spring.NETSpring.NET
+SayHello()
User
+SayHello()
«interface»IUser
UserProxy
Client
UserAdvice
Демонстрация #1Демонстрация #1Демонстрация #1Демонстрация #1
• Hello worldHello world• Hello worldHello world
Демонстрация #Демонстрация #22Демонстрация #Демонстрация #22
• Управление на транзакции с Управление на транзакции с AOPAOP• Управление на транзакции с Управление на транзакции с AOPAOP
ContextBoundObjectContextBoundObjectContextBoundObjectContextBoundObject
• Стандартен клас за Стандартен клас за .NET Framework.NET Framework
• Как работи?Как работи?
• Стандартен клас за Стандартен клас за .NET Framework.NET Framework
• Как работи?Как работи?
Демонстрация #Демонстрация #33Демонстрация #Демонстрация #33
• AOP AOP чрез чрез ContextBoundObjectContextBoundObject• AOP AOP чрез чрез ContextBoundObjectContextBoundObject
Демонстрация #Демонстрация #44Демонстрация #Демонстрация #44
• Производителност и Производителност и AOPAOP• Производителност и Производителност и AOPAOP
За и противЗа и противЗа и противЗа и против
• ЗаЗа
• Намалява свързаността на класовете в Намалява свързаността на класовете в приложениетоприложението
• Повишава преизползването на кодПовишава преизползването на код
• ПротивПротив
• Не се поддържа стандартно (Не се поддържа стандартно (.NET .NET и и JavaJava))
• Повишава необходимите знания необходими Повишава необходимите знания необходими на разработчикана разработчика
• Кода не е толкова ясенКода не е толкова ясен
• Затруднено тестванеЗатруднено тестване
• ЗаЗа
• Намалява свързаността на класовете в Намалява свързаността на класовете в приложениетоприложението
• Повишава преизползването на кодПовишава преизползването на код
• ПротивПротив
• Не се поддържа стандартно (Не се поддържа стандартно (.NET .NET и и JavaJava))
• Повишава необходимите знания необходими Повишава необходимите знания необходими на разработчикана разработчика
• Кода не е толкова ясенКода не е толкова ясен
• Затруднено тестванеЗатруднено тестване
ВръзкиВръзкиВръзкиВръзки
• 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
Aspect Oriented Aspect Oriented ProgrammingProgrammingAspect Oriented Aspect Oriented ProgrammingProgramming
Въпроси?Въпроси?Въпроси?Въпроси?