Zdravím,
mohol by mi dakto vysvetlit Dependency Injection, bez implementacnych detailov, co najjednoduchsie a najabstraktnejsie?
Dependency Injection
-
harrison314
Hardcore addict
- Príspevky: 8223
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Dependency Injection
bez implementačných detailov sa to vysvetliť nedá, ale pokúsim sa ich množstvo minimalizovať. Budem používať syntax jazyka PHP.
Pointa je v udržiavateľnosti kodu. Veľa programátorov píše kod typu: alebo V prvom prípade sa používa návrhový vzor singleton, v druhom globálna premenná. Oba však robia to isté - vytvoríme si triedu a predáme jej odkaz na spojenie na databázu, lebo v danej triede máme metody ktoré vyžadujú prácu s databázou. Takéto riešenie je však zlé, lebo sme odkázaný na vonkajší kod, ktorý nie je (nemusí byť) v našej réžii. My sme autorom triedy, a ak ju niekto zle implementuje, nebude fungovať. Ak niekto nepoužije globálnu premennú, alebo neimplementuje daný singleton, nebude mu náš kod fungovať. Inak povedané - my ho nútime prerábať jeho hotový kod na používanie singletonu alebo globálnej premennej ak chce použiť našu triedu. To je zlé. V jednom článku o tom bolo pekne napísané, že hierarchia má ísť z hora dole, nie z dola hore. Nemáme my volať čo chceme, ale má nám to program sám ponúknuť. Ako aj herci nežiadajú úlohu, ale režisér im ju ponúka. Takže správne riešenie má byť: a zavolanie Teraz sa už nespoliehaš na globálnu premennú, ani na singleton. Nemáš tam žiadne "skryté" závislosti. Sám programátor určí spojenie, ktoré sa bude používať. Vložil závislosti (dependency injection). V zásade máš dve možnosti ako to použiť.
1) setterom:
2) parametrom v konštruktore:
Pointa je v udržiavateľnosti kodu. Veľa programátorov píše kod typu:
Kód: Vybrať všetko
class Trieda{
var $_database = NULL;
public function __construct() {
$registry = RegistrySingleton::getInstance();
$this->_database = $registry->database;
}
}Kód: Vybrať všetko
class Trieda{
var $_database = NULL;
public function __construct() {
global $databaseConnection;
$this->_database = $database;
}
}Kód: Vybrať všetko
class Trieda{
private $_databaseConnection;
public function __construct() { }
public function setDatabaseConnection($databaseConnection) {
$this->_databaseConnection = $databaseConnection;
}
}Kód: Vybrať všetko
$objekt = new Trieda();
$objekt->setDatabase($databaseConnection);1) setterom:
Kód: Vybrať všetko
$objekt = new Trieda();
$objekt->setDatabase($databaseConnection);
$objekt->setConfigFile($configFile);Kód: Vybrať všetko
$objekt= new Trieda($databaseConnection, $configFile);-
harrison314
Hardcore addict
- Príspevky: 8223
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Dependency Injection
audiotrack: Dakujem, strucne, vystizne, pochopitelne.
karmista: obcas clovek pouziva aj veci, ktore nevie ako sa volaju, mat na vsetko rozhranie mi pride prirodzene
karmista: obcas clovek pouziva aj veci, ktore nevie ako sa volaju, mat na vsetko rozhranie mi pride prirodzene
Re: Dependency Injection
A teraz s pravdou von Audiotrack. Toto si vypotil z hlavy, ci si si i cosi dostudoval? Ak z hlavy, ako si taketo veci moze clovek zapamatat? Ved toho je kvantum. Kolko sa vlastne venujes programovaniu? Ja vobec akosi neviem pochopit obsah tvojho prispevku a viem ze je to vo mne. Kde bude chyba? AKo sa posunut dalej? Ja mozem precitat celu knihu C++, ale ked sa ma o 2 mesiace ktosi syta ako by som toto a toto naprogramoval, urcite by som to z hlavy nepsravil. Bez pomoci pozerat opat do knih. Asi treba prijat tu zlu spravu ... nikdy zo mna dobry programator nebude
Zaujmy: Pascal, Object pascal (Delphi), Assembler.
Zaujmy: Pascal, Object pascal (Delphi), Assembler.
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Dependency Injection
človek si to zapamätá, keď ho to baví a vyštudoval to. A programovaniu sa venujem dlho, tuším niekde v tretiaku na strednej som začal. Aspoň z toho roku som prvý diplom doma našiel
Takže nejakých 8 rokov cca
-
awtt
Medium Professional
- Príspevky: 1234
- Registrovaný: 01 nov 2006, 19:37
- Bydlisko: San Francisco
- Kontaktovať používateľa:
Re: Dependency Injection
Ked si len precitas knihu a nevenujes sa tomu tak to zabudnes to je jasne.Gregi napísal:A teraz s pravdou von Audiotrack. Toto si vypotil z hlavy, ci si si i cosi dostudoval? Ak z hlavy, ako si taketo veci moze clovek zapamatat? Ved toho je kvantum. Kolko sa vlastne venujes programovaniu? Ja vobec akosi neviem pochopit obsah tvojho prispevku a viem ze je to vo mne. Kde bude chyba? AKo sa posunut dalej? Ja mozem precitat celu knihu C++, ale ked sa ma o 2 mesiace ktosi syta ako by som toto a toto naprogramoval, urcite by som to z hlavy nepsravil. Bez pomoci pozerat opat do knih. Asi treba prijat tu zlu spravu ... nikdy zo mna dobry programator nebude![]()
Zaujmy: Pascal, Object pascal (Delphi), Assembler.
Ale keby si pracoval ako programator, alebo aspon vo volnom case aj nieco realne programoval tak nemas problem ver mi
Ked chces byt programator, tak citanie knih nestaci, daj si nejake fiktyvne ulohy typu naprogramovat pozicovnu knih, guestbook... to ti da viac