Патерн (принцип) IOC&DI 2008-2011. IoC2 Spring Framework.

Slides:



Advertisements
Similar presentations
Розробка Web-проектів із використанням Spring Framework 2008 (Курс “Інформаційні технології”)
Advertisements

АТ Інститут Інформаційних Технологій Комплекс засобів криптографічного захисту інформації на платформі IBM Lotus Заступник головного конструктора Горбенко.
Патерн (принцип) IOC&DI 2010 (Курс “Інформаційні технології”)
10 КЛАС ЗА ПІДРУЧНИКОМ «ІНФОРМАТИКА. 10 КЛАС» Й.Я. РИВКІНДА, Т.І. ЛИСЕНКО, Л.А. ЧЕРНІКОВОЇ, В.В. ШАКОТЬКО Вивчаємо інформатику СЗОШ № 8 м.Хмельницького.
планування, проектування, в методичній роботі навчального закладу
«Роль самоаналізу для підвищення ефективності уроку»
Multimedia Presentation "What Is a Computer?"
Українська народна вишивка — один із видів декоративно-ужиткового мистецтва Презентацію створено за допомогою комп’ютерної програми ВГ «Основа» «Електронний.
Кротова І.В., методист Центру аналізу та прогнозування розвитку освіти Всеукраїнська українознавча гра «Соняшник»
Петраківський навчально-виховний комплекс „Дошкільний навчальний заклад – загальноосвітня школа І-ІІІ ступенів” Черкаської області.
Електронна пошта – сервіс
М УЛЬТИМЕДІЙНІ ПРЕЗЕНТАЦІЇ Мультимедійні технології С ТВОРЕННЯ КЛІПІВ.
Нуклеїнові кислоти. Біологічна роль нуклеїнових кислот.
Пилипенко Олена Володимирівна,
ЮРИСТ Професія відповідальна, І в нашому житті нагальна!
Відділ освіти Кам’янської райдержадміністрації Грушківської загальноосвітньої школи І-ІІІступенів Презентація до уроку з природознавства в 6 класі на тему:
ОПЕРАЦІЙНА СИСТЕМА Windows 
Створення та форматування інформаційного вмісту презентації
Презентація на тему: Органічні речовини і здоров'я людини
Тематика художніх творів Т.Г.Шевченка в період заслання з 1848 року.
Створення макросів в автоматичному режимі
Шаблони документів і робота з ними
Загальна характеристика
Впровадження нового Державного стандарту
Е в о л ю ц і я кровоносної системи Хордових тварин.
Словник пояснення конкретного слова переклад з однієї мови на іншу.
Вбудовування та зв’язування файлів. Веб-публікація документів
1. Планарія – паразит, що живиться кров’ю риб. 2. Травна система Стьожкових червів складається з ротової порожнини і розгалуженого кишечника 3. Проміжний.
Основні поняття та засоби комп'ютерної графіки
Робота з Windows Файл, папка.
Пpавила техніки безпеки під час pоботи на комп’ютеpі. Поняття по інформацію. Повідомлення. Способи подання і кодування повідомлень. Двійкове кодування.
Кристалічні ґратки. Залежність фізичних властивостей речовини від типів кристалічних ґраток.
Загальне поняття про прикметник
Вимірювання та вимірювальні прилади Лабораторна робота
Основи векторної графіки
Електронні таблиці 3.7. Діаграми в Excel «Не бійся, що не знаєш – бійся, що не навчишся». (Китайська мудрість)
Електронні таблиці MS Excel.
ОПЕРАЦІЙНА СИСТЕМА Windows Встановіть відповідність 
Сенсорне виховання як важлива складова у всебічному розвитку
Тестове завдання № 7 1. Розв’яжіть рівняння 21 0,4
Комп'ютерні презентації
Автори навчально - методичного комплекту : М. С. Вашуленко, доктор педагогічних наук, професор, дійсний член НАПН України С. Г. Дубовик, кандидат педагогічних.
година правової абетки у 5 класі
Тема: Закон Авогадро. Молярний об’єм газів.
Повідомлення на тему: Методи астрономічних спостережень Робота
Сходинки до інформатики. 2 клас за новою державною програмою
Google App Engine for Java Google App Engine2 Google App Engine (GAE) – це інфраструктура хмарних обчислень, яка орієнтована на підтримку веб-додатків.
Платформа Microsoft Azure 2014 (До 2014 року платформа мала назву Windows Azure)
Аналітична хімія. Хімічний аналіз.
Web MVC фреймворки WebWork та Struts (Курс “Інформаційні технології”)
Ant Ant2 Призначення: виконання повторюваних, як правило, рутинних завдань, пов'язаних із розробкою, розгортанням, виконанням проектів. Приклади.
1 Постановою Кабінету Міністрів України від 23 листопада 2011 р. № 1392 затверджено новий Державний стандарт базової і повної загальної середньої освіти.
До використання COM- об’єктів у Visual Studio (C#)
Нехай u — вершина, від якої шукаються інші, V — множина вершин графа, di — відстань від u до вершини i,, w(i, j) — вага «ребра» (i, j). 1. Множина.
Розробка Web-проектів із використанням Struts Framework 2008.
Web-framework Tapestry 2008 (Курс “Інформаційні технології”)
Google Web Toolkit (GWT). AJAX-додатки
Google Web Toolkit (GWT). AJAX-додатки
Навчальний елемент Робота з меню у програмі Windows'95 Назва: Оператор комп’ютерного набору Професія: UA002 Код:
ITERATOR Патерн поведінки Доповідач: Пропой Ярослав Рецензент: Мельниченко Владислав 0/40 NEXTSTART.
Списки типів Нікітін Олексій. Навіщо потрібні списки типів? Розглянемо шаблон Abstract Factory. class WidgetFactory { public: virtual Window* createWindow()
Горобей Тетяна Павлівна, учитель математики Фастівського ліцею-інтернату.
Ламінування та способи ламінування
МАГІСТЕРСЬКА РОБОТА МАГІСТЕРСЬКА РОБОТА На тему “Проект реконструкції території санаторію відновного лікування працівників ВВС у місті Ворзель“ Доповідач:
Технологія виконання швів «козлик» та «оксамитовий»
Активність радіонуклідів
1 ЕКОЛОГІЧНИЙ МОНІТОРИНГ СТАНУ ГРУНТОВИХ ВОД В УРБОЕКОСИСТЕМІ.
Iterator と Adaptor デザインパターン 第1回
2015. Два рiвні складності сертифікаційної роботи (тесту) Абітурієнти складали тест ЗНО з математики двох рівнів складності – базового і поглибленого,
АВТОМАТИЗОВАНИЙ ЕЛЕКТРОПРИВОД МІКСЕРА ПРИГОТУВАННЯ ФРУКТОВО- ОВОЧЕВИХ СОКОВИХ СУМІШЕЙ Керівник проекту: к.т.н. Бабій С. М. Виконав: ст. гр. ЕПА-14м Гома.
Presentation transcript:

Патерн (принцип) IOC&DI

IoC2 Spring Framework

IoC3 Spring Framework

IoC4 IoC Container – ядро Spring Framework Патерн (принцип) IOC & DI — Inversion of Control (IoC) and Dependency Injection (DI) IoC контейнери Патерн DI

IoC5 До залежності класів... Динаміка... public class Class1 { public Class2 theClass2 = new Class2() ; public Class3 theClass3 = new Class3() ; public Class1() { } Додано після генерації коду

IoC6 Spring-проект dekor (для патерна «Декоратор»)

IoC7 Пригадаємо… Decorator. Приклад d2 : CDecB component= d1 : CDecA component= c : CComponent public class Client { public static void Main ( string[] args ) { ConcreteComponent c = new ConcreteComponent(); ConcreteDecoratorA d1 = new ConcreteDecoratorA(); ConcreteDecoratorB d2 = new ConcreteDecoratorB(); // Link decorators d1.SetComponent( c ); d2.SetComponent( d1 ); d2.Operation(); } Додаткова гнучкість пов'язана з можливістю змінювати композиції об'єктів у програмі // Link decorators d1.SetComponent( c ); d2.SetComponent( d1 ); Ін'єкції Створення об'єктів

IoC8 Версії Java-класів (зі Spring-проекту) public interface IComponent { void operation(); } public class Decorator implements IComponent{ private IComponent component; public void setComponent(IComponent component) { this.component = component; } public void operation(){ component.operation(); } public class ConcreteComponent implements IComponent{ public void operation(){ System.out.println( "ConcreteComponent!"); } public class DecoratorA extends Decorator { public void operation(){ super.operation(); System.out.println("DecoratorA"); } Класи DecoratorB, DecoratorC мають аналогічний вигляд

IoC9 Eclipse. Spring-проект dekor з трьома конкретними декораторами. Загальний вигляд проекту Закладка з головним Java-класом проекту

IoC10 Конфігураційний файл (контексту) beans_ctx.xml та відповідна дротяна модель Spring <beans xmlns=" xmlns:xsi=" xsi:schemaLocation=" Декларативний стиль!

IoC11 Головний Java-клас проекту import org.springframework.context.ApplicationContext; import org.springframework.context.support. ClassPathXmlApplicationContext; public class Project { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext( "beans_ctx.xml"); IComponent component; component = (IComponent)ctx.getBean("rootComponent"); component.operation(); }

IoC12 Виконання проекту public class Decorator implements IComponent{ private IComponent component; public void setComponent(IComponent component) { this.component = component; } public void operation(){ component.operation(); } public class DecoratorA extends Decorator { public void operation(){ super.operation(); System.out.println("DecoratorA"); } Задіяна така єдина стратегія використання декораторів: спочатку декорування здійснює внутрішній (ін'єктований) об'єкт, а потім зовнішній.

IoC13 Композиції об'єктів та виконання проекту Варіанти композиції об'єктів задаються виключно конфігураційним файлом (як наслідок, при зміні композицій проект не потребує перекомпіляції). Важливо! <beans xmlns=" xmlns:xsi=" xsi:schemaLocation="

IoC14 Патерн IOC&DI на прикладі

IoC15 Патерн IOC&DI на прикладі (1/4) package com.kvf.demo; public interface IGreeting { void printGreeting(); } package com.kvf.demo; import com.kvf.demo.IGreeting; public class Hi implements IGreeting{ public void printGreeting() { System.out.println("Hi!"); } package com.kvf.demo; import com.kvf.demo.IGreeting; public class Hello implements IGreeting{ public void printGreeting() { System.out.println("Hello!"); } class Class1 - ? Задача: передбачити для класу Class1 (у якому використовується вітання printGreeting ) можливість заміни об'єкту типу Hi на об'єкт типу Hello, забезпечуючи при тому незмінність коду Class1. Залежність ? Іноді один з подібної пари класів є тестовим

IoC16 Патерн IOC&DI на прикладі (2/4) package com.kvf.demo; import com.kvf.demo.*; public class Class1 { private Hi greeting= new Hi(); public void foo() { greeting.printGreeting(); } private Hello greeting = new Hello (); Традиційний прийом використання привітання printGreeting() не підходить Заміна коду!?

IoC17 Патерн IOC&DI на прикладі (3/4) package com.kvf.demo; import com.kvf.demo.IGreeting; public class Class1a { private IGreeting greeting; public void set Greeting ( IGreeting greeting ) { this. greeting = greeting ; } public void foo() { greeting.printGreeting(); } package com.kvf.demo; import com.kvf.demo.*; public class Super { // Runner public static void main(String[] args) { Class1a c = new Class1a (); c.set Greeting ( new Hi () ); c.foo(); } Незмінний java-код Class1a ! new H ello () Управління по створенню об'єктів типів Hi чи Hello “передано” (Inversion of Control ) класу Super (Runner). Запропонований код забезпечує ін'єкцію залежності (Dependency Injection ) Class1a від класу Hi чи від класу Hello відповідно. Dependency Injection Модифікація при пере- ході від Hi до Hello

IoC18 Патерн IOC&DI на прикладі (4/4) Spring Core (IoC container) виконує роль, подібну до Super, забезпечуючи створення об'єктів та ін'єкцію залежності

IoC19 IoC Container та патерн IOC&DI Патерн (принцип) Inversion of Control (IoC) and Dependency Injection (DI)

IoC20 Spring: IoC + декларативний стиль. Конфігураційний файл (контексту) beans_ctx.xml Eclipse +Spring Plugin (ПКМ | Open Graph) Компонентна “(дротяна) проводка” (Component Wiring) Spring Core бере на себе відповідальність за створення об'єктів (бінів) та їх “зв'язування” на основі ін'єкції Дротяна модель

IoC21 Eclipse (проект greeting). Open Graph

IoC22 Конфігураційний файл (контексту) beans_ctx.xml <beans xmlns=" xmlns:xsi=" xsi:schemaLocation= " spring-beans.xsd"> <property name="greeting» ref="hi"> Заміни при переході від класу Hi до класу Hello

IoC23 Spring-проект. Перероблений основний клас Super.java package com.kvf.demo; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Super { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans_ctx.xml"); Class1a c = (Class1a)ctx.getBean("class1a"); System.out.println("Greeting:"); c.foo(); }

IoC24 Виконання проекту (Run as -> Java Application )

IoC25 Виконання проекту при переході від класу Hi до класу Hello Єдине необхідне виправлення! Ніяка перекомпіляція не потрібна

IoC26 Setter Injection or Constructor Injection package com.kvf.demo; public class Class2 { private IGreeting greeting; public void setGreeting(IGreeting greeting) { this.greeting = greeting; } public Class2 (IGreeting greeting) { this.greeting = greeting; } public void foo() { greeting.printGreeting(); } public class Super2 { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans_ctx2.xml"); Class2 c = (Class2)ctx.getBean("class2"); System.out.println("Greeting:"); c.foo(); } Конструктор з параметром Файл Super2.java (фрагмент) Файл Class2.java Можна вилучити

IoC27 Constructor Injection. Конфігураційний файл (контексту) beans_ctx2.xml Файл beans_ctx2.xml (фрагмент)

IoC28 Виконання проекту з Constructor Injection

IoC29 Приклад. Spring-проект для патерна «Стратегія»

IoC30 Пригадаємо… Strategy (dofactory.com) Визначає сімейство алгоритмів, в якому інкапсулюється кожен з них і забезпечується їх взаємозаміна. Патерн "Стратегія" дозволяє змінювати алгоритми сімейства незалежно від клієнтів, які використовують ці алгоритми.

IoC31 Пригадаємо… Strategy (dofactory.com) class ConcreteStrategyB : Strategy { public override void AlgorithmInterface() { Console.WriteLine( "CalledConcreteStrategyB.”+ ”AlgorithmInterface()"); } class Context { private Strategy _strategy; // Constructor public Context(Strategy strategy) { this._strategy = strategy; } public void ContextInterface() { _strategy.AlgorithmInterface(); } class MainApp { static void Main() { Context context; context = new Context( new ConcreteStrategyA()); context.ContextInterface(); context = new Context( new ConcreteStrategyB()); context.ContextInterface(); } /// The 'Strategy' abstract class abstract class Strategy { public abstract void AlgorithmInterface(); } class ConcreteStrategyA : Strategy { public override void AlgorithmInterface() { Console.WriteLine( "CalledConcreteStrategyA.”+ ”AlgorithmInterface()"); }

IoC32 Патерн Strategy. Версії Java-класів public interface IStrategy { void AlgorithmInterface(); } package com.kvf.ttp; import com.kvf.ttp.IStrategy; public class ConcreteStrategyA implements IStrategy{ public void AlgorithmInterface() { System.out.println("StrategyA.AlgorithmInterface"); } public class Context { private IStrategy _strategy; public Context(IStrategy strategy){ this._strategy = strategy; } public void ContextInterface(){ _strategy.AlgorithmInterface(); } Конструктор з параметром

IoC33 Файл beans_ctx.xml (фрагмент) Використання Spring IoC контейнера Виконання проекту

IoC34 Приклад використання IoC/DI на платформі.NET

IoC35 Використання DI у проектах ASP.NET MVC3 (1/2) public class HomeController : Controller { private ITextService service; public HomeController(ITextService s) { service = s; } public ActionResult Index() { ViewBag.Message = service.GetText (name); return View(); }... public interface ITextService { string GetText(string text); } public class FirstTextService : ITextService { public string GetText(string text) { return String.Format( "{0}, wellcome to ASP.NET MVC!", text); } Конструктор

IoC36 protected void Application_Start() { var kernel = new StandardKernel(); kernel.Bind ().To (); DependencyResolver.SetResolver( new MyDependencyResolver(kernel)); } Використання DI у проектах ASP.NET MVC3 (2/2) Фрагменти Global.asax.cs public class MyDependencyResolver : IDependencyResolver { private readonly IKernel _kernel; public MyDependencyResolver(IKernel kernel) { _kernel = kernel; } public object GetService(Type serviceType) { return _kernel.TryGet(serviceType, new IParameter[0]); } public IEnumerable GetServices(Type serviceType) { return _kernel.GetAll(serviceType, new IParameter[0]); } SecondTextService При потребі скористатись іншим сервісом

IoC37 Використання IoC на платформі.NET Деякі відомі IOC контейнери на платформі.NET : Windsor; StructureMap; Spring.NET; ObjectBuilder.

IoC38 Spring IoC. Ще один приклад

IoC39 applicationContext.xml (фрагменти) - (1/2) <beans xmlns=" xmlns:xsi=" xsi:schemaLocation=" Demo-проект із Spring-документації

IoC40 applicationContext.xml (фрагменти) - (2/2)