Dependency injection Předávání závislostí Petr Kalivoda

Slides:



Advertisements
Podobné prezentace
(instance konkrétní třídy)
Advertisements

ÚVOD DO C++ 3 TŘÍDY a objekty - POKRAČOVÁNÍ
Funkce Připomeňme si program pro výpočet faktoriálu:
Ať se postará někdo jiný, najmeme si programátory z Číny. Čuníkům vstup zakázán.
Proxy. Definice  zástupce nebo náhradník za dotyčný objekt  proxy i zastoupený objekt dědí od stejného interfacu  proxy kontroluje přístup k objektu.
Pole, ukazatele a odkazy
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Uživatelská rozhraní Uživatelská rozhraní 9. cvičení.
1NPRG054 Vývoj vysoce výkonného software /2013 David Bednárek Domácí úkol.
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Singleton 1 1.
Polymorfismus Dědičnost
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
Zend Framework 2. Svět se změnil! Zapomeňte! Všechno je jinak!
Čtvrté cvičení Objektové programování Objektový model v Javě
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
SOKOBAN Ondra Mandík, I4a SPŠE Ječná. POPIS Hra bude obsahovat jednoho hráče, bedny, zdi a cílová místa pro bedny. Hráč nesmí procházet zdí. Hráč před.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Dependency injection Jiří Matula Neruším? Ráda bych vám pomohla
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
Podmíněné vykonávání a rozvětvení. Co je to? Podmíněné vykonávání = nechceme provést všechny příkazy, chceme určité části kódu něčím podmínit Rozvětvení.
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
C# - Exceptions (výjimky)
Objektové orientované programování Objektově orientované problémy v PHP Lukáš Masopust 2008.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
6. cvičení Polymorfismus
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
Memento. Obnovení operačního systému ( Windows | Linux...) Všichni víme, co jsou transekce v databázi Memento – zálohování databáze.
Čísla Desetinná čísla. čísla desetinná se v PC ukládají jiným způsobem než čísla celá – výpočty s nimi provádí dvě odlišné části procesoru při výpočtech.
Association table mapping Jakub Chalupa Naim Ashhab ČVUT FEL A7B36ASS – Architektura SW systémů LS 2014.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
PB161 Principy OOP - rozhraní, dědičnost PB161 | Principy OOP - Dědičnost, rozhraní
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
Decorator. Rozšiřuje objekty o dodatečné chování  rozšiřuje konkrétní objekty, ne třídy  rozšiřuje objekt dynamicky, tj. za běhu Upřednostňuje kompozici.
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
Foreign key mapping Jakub Chalupa Naim Ashhab ČVUT FEL
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
Observer Martin Dráb Návrhové vzory, Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
Uživatelská rozhraní Cvičení 12a Martin Němec A
Uživatelská rozhraní Uživatelská rozhraní. knihovna Qt Trolltech (1994) v Oslu (Norsko) vytváří grafické uživatelské rozhraní (GUI) pro C++ multi-platformová.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
SOLID principy v OOP návrhu
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Y36PJC Programování v jazyce C/C++
Generické typy jsou třídy či interfejsy deklarující tzv. typové parametry jimiž: systematizují typovou kontrolu kompilátorem, vyjadřují jasněji smysl,
Výukový materiál zpracován v rámci projektu
Návrhový vzor Flyweight
Počítače a programování 2 pro obor EST BPC2E PŘEDNÁŠKA 3
Strategy „Definujte rodinu algoritmů, zapouzdřuje je aby byly vzájemně zaměnitelné. Strategie umožňuje, aby se algoritmus nebyl závislý na klientech, kteří.
Bridge.
Reflexe jako introspekce
ARP / RARP Václav Dědek.
private var hodnota:number
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Vázání dat Data Binding
Výčtové typy ( Java 5 ) Výčtové typy jsou speciální třídy zavedené pro větší bezpečí a pohodlí. V nejjednodušší variantě se definují příkladmo takto:
Dfdfdf.
Bridge.
Transkript prezentace:

Dependency injection Předávání závislostí Petr Kalivoda

Dependency injection – úvod Metoda, sloužící k odtržení tříd od jejich závislostí. Problém  Výběr vhodné metody Příklady:  Auto  Letadlo  Messaging Jak na to?  Constructor injection  Setter injection  Interface injection

Bez Dependency injection Původ řidiče? Výměna? Servis? class Auto { private IŘidič řidič; public Auto() { řidič = new PostaršíŘidič("Franta Novák"); } public void nabourejDo(Objekt o) { řidič.setPudSebezáchovy(false); řidič.rozjeď(this); řidič.nastavKolizníKurz(this, o); }

Constructor injection Předání závislostí přes konstruktor Řidič se nenarodil v autě Můžu otestovat auto …ale? class Auto { private IŘidič řidič; public Auto(IŘidič řidič) { this.řidič = řidič; } public void nabourejDo(Objekt o) { řidič.setPudSebezáchovy(false); řidič.rozjeď(this); řidič.nastavKolizníKurz(this, o); } class ServiceFactory { private IŘidič řidič; public ServiceFactory() { this.řidič = new Řidička("Marcela"); } public IŘidič getŘidič() { return řidič; }

Constructor injection – problémy Závislost nemusím vždy potřebovat Střídání řidičů za jízdy? Přehlednost Auto a = new Auto(new ZkušenýŘidič(factory.getŘidič()); Stack náklad = a.getNáklad(); //k čemu mám řidiče? class Boeing747 { public Boeing747( IKapitán kapitán, IPilot druhý_pilot, ITechnik palubní_technik, Stack letušky Stack úklidová_četa, IDoktor doktor, … WTF ) { … }

Setter injection Můžu střídat řidiče Můžu testovat …ale? class Auto { private IŘidič řidič; public void setŘidič(IŘidič řidič) { this.řidič = řidič; }

Setter injection - problémy Objekt nemusí mít bez závislosti smysl Závislost nemusím chtít měnit za běhu Použití: class PersonalMessageHandler { private IMessageSender sender; public PersonalMessageHandler(IMessageSender sender) { this.sender = sender; } public void send(Message message, Person recipient) { sender.send(message, recipient); } handler = new PersonalMessageHandler(container.getSMTPMailSender()); handler.send(…);

Interface injection Vkládám závislosti na základě rozhraní Kontejner..ale? Spousta inject metod! interface IŘidičInjectable { public void injectŘidič(IŘidič řidič); } class Auto implements IŘidičInjectable {... } class NaiveIIDIContainer { public Řidič getŘidič() { return new Řidič("Guhlász Magyargaydok"); } public Object newInstance(Class clazz) { Object o = clazz.newInstance(); if(o instanceof IŘidičInjectable) { ((IŘidičInjectable)o).injectŘidič(getŘidič()); } return o; }

Interface injection bez interface PHP <?php class Foo { private $s; public function injectSomething(stdClass $s) { $this->s = $s; } class NaiveInjector { public function performInjections($object) { $re = new ReflectionClass($object); //reflexe foreach($re->getMethods() as $m) { //procházim parametry if(preg_match('#^inject[A-Z]#', $m->getName())) { foreach($m->getParameters() as $p) { //procházim typy $class = $p->getClass(); if( $class instanceof ReflectionClass && $class->getName() == 'stdClass‘ ) { //našel jsem $object->injectSomething(new stdClass); } }}}}} $f = new Foo(); (new NaiveInjector())->performInjections($f); //hotovo

Service Locator Statický registr služeb Netransparentní Testování – je náklad stále závislý na řidičovi? class ServiceLocator { private static HashMap services = new HashMap<>(); public static void add(String name, Object service) { services.put(name, service); } public static Object getService(String name) { return services.get(name); } class Auto { private IŘidič řidič = (IŘidič)ServiceLocator.getService("řidič");... }

Děkuji za pozornost. Otázky?