170 likes | 305 Views
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# Познания по ООП
E N D
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# • Познания по ООП • Базови познания по UML (клас диаграми)
Съдържание • Какво представлява AOP • AOP и .NET • Spring.NET • ContextBoundObject • Примери използващи AOP
Какво е AOP? • Създадено е като концепция през средата на 90-те в Xerox Palo Alto Research Center • Има за цел да отдели отделните части в едно приложение, така че те да не са зависими една от друга • Примери: • Поддръжка на лог информация • Управление на транзакциите
Добър ли е този код? public doubleGetDiscount() { Console.WriteLine(“Entering GetDiscount()"); double discount = mTotalSum * mDiscountPercent / 100; Console.WriteLine(“Leaving GetDiscount()"); return discount; } public void SaveInvoice() { using (TransactionScope ts = new TransactionScope()) { … SqlCommand saveInvoiceCommand = new SqlCommand(); … saveInvoiceCommand.ExecuteNonQuery(); ts.Complete(); } } public void SaveInvoice() { … SqlCommand saveInvoiceCommand = new SqlCommand(); … saveInvoiceCommand.ExecuteNonQuery(); } public doubleGetDiscount() { double discount = mTotalSum * mDiscountPercent / 100; return discount; }
Как работи AOP public doubleGetDiscount() { double discount = mTotalSum * mDiscountPercent / 100; return discount; } public doubleLogGetDiscount() { Console.WriteLine(“Entering GetDiscount()"); }
Няколко термина • Aspect – програмен код, който е независим • Записване в log файл • Joinpoint – точка от изпълнението на програмата, където един или няколко аспекта могат да бъдат приложени • метод, пропърти, конструктор • Advice – дефинира кога ще се изпълни кода приложен към даден pointcut • преди, след, около • Pointcut – дефинира група joinpoint-ове, към които се прилага даден advice • Всички методи започващи с “Print” • Weaving – процеса, при който се интегрират аспектите в приложението.
Spring.NET • http://www.springframework.net/ • Open source • Първа реализация на Java • Поддържа: • Aspect Oriented Programming • Dependency Injection • …
Как работи Spring.NET «interface» UserAdvice IUser + SayHello () UserProxy User + SayHello () Client
Демонстрация #1 • Hello world
Демонстрация #2 • Управление на транзакции с AOP
ContextBoundObject • Стандартен клас за .NET Framework • Как работи?
Демонстрация #3 • AOP чрез ContextBoundObject
Демонстрация #4 • Производителност и AOP
За и против • За • Намалява свързаността на класовете в приложението • Повишава преизползването на код • Против • Не се поддържа стандартно (.NET и Java) • Повишава необходимите знания необходими на разработчика • Кода не е толкова ясен • Затруднено тестване
Връзки • Aspect Oriented Programming • http://en.wikipedia.org/wiki/Aspect_oriented_programming • http://aosd.net/ • http://www-128.ibm.com/developerworks/rational/library/2782.html • Spring.NET • http://www.springframework.net/documentation.html • ContextBoundObject • http://msdn.microsoft.com/msdnmag/issues/03/03/ContextsinNET/default.aspx • http://www.codeproject.com/csharp/AspectIntercept.asp • http://www.theserverside.net/tt/articles/content/AspectOrientingNET/AspectOrientingNET.html
Aspect Oriented Programming Въпроси?