Advanced Media Management Drupal 7 / Drupal 8 - DrupalCamp Finland
Drupal a OOP [DrupalCamp SK 2013]
-
Upload
david-lukac -
Category
Technology
-
view
274 -
download
0
Transcript of Drupal a OOP [DrupalCamp SK 2013]
Drupal a OOP +
Dávid LukáčCTO @ Mogdesign.eu
[email protected]/in/davidlukacwww.twitter.com/davidlukac
Cieľová skupina
• vývojár• tím líder• projektový manažér
?
Čo chceme vyriešiť ?
Čo chceme vyriešiť ?
• špagety kód• dlhé .module súbory• hooky, implementácia logiky, pomocné
funkcie• SQL• opakujúci sa kód
Čo chceme vyriešiť ?
Čo chceme vyriešiť ?
• schovaná funkcionalita• nemodulárne riešenia• vysoká chybovosť• change management je nočná mora
Čo chceme vyriešiť - ciele
Čo chceme vyriešiť - ciele
• prehľadný kód• jeden súbor - jedna trieda• architektúra• modulárne riešenia• nižšia chybovosť• noví členovia tímu
Prečo nám v tom OOP pomôže ?
• čo je vlastne OOP ?• koncepty OOP• architektonické koncepty
Prečo nám v tom OOP pomôže ?
Dedičnosť
Zapuzdrovanie
Prečo nám v tom OOP pomôže ?
Dedičnosť
Zapuzdrovanie
Polymorfizmus
Prečo nám v tom OOP pomôže ?
Modularizácia
Prečo nám v tom OOP pomôže ?
Modularizácia
Abstrakcia
Prečo nám v tom OOP pomôže ?
Modularizácia
Abstrakcia
Zapuzdrovanie
Prečo nám v tom OOP pomôže ?
Hierarchia
Prečo nám v tom OOP pomôže ?
Hierarchia Kontinuita
3835
Prax
Štruktúra adresára modulu
views/includes/
Štruktúra adresára modulu
views/includes/
classes/varsclasses/controllersclasses/modelsclasses/daoclasses/log
Variables
define('DCAMP_2013_MAX_REG', 130);
Variables
class DrupalCampVariables { public static $registartionOpenVar = 'dcamp_reg_open'; $registrationOpen = TRUE; $registeredVar = 'dcamp_registered_count';
$maxRegisteredVar = 'dcamp_max_regs'; $maxRegistered = 120;}
Variables
if (variable_get(DrupalCampVariables::$registartionOpenVar, FALSE) &&
variable_get(DrupalCampVariables::$registeredVar, 0) < DrupalCampVariables::$maxRegistered ) {
... DrupalCamp->register($this->$user); ... return;}
Vrstvená architektúra
Vrstvená architektúra
OSI
Vrstvená architektúra
• interface modulu• biznis logika• DAO
Netreba preháňať
Base modulclasses/controllers/FormController.phpclasses/controllers/PathController.phpclasses/dao/DAO.phpclasses/models/EntityWrapper.phpclasses/models/Model.phpclasses/models/NodeWrapper.phpclasses/models/Singleton.phpclasses/models/UserWrapper.php.module
Príklad hook_menu/*** Implements hook_menu().*/function my_module_hook_menu() { $items = array();
$items['my-path'] = array( 'page callback' => 'my_callback_page', 'access callback' => 'user_access', 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, );
return $items;}
Príklad hook_menu
$link = l(‘Click me!’, ‘my-path’);
Príklad hook_menu
class MyPathController extends PathController { public $path = ‘my-path’;
// some other code...}
Príklad hook_menu/*** Implements hook_menu().*/function my_module_hook_menu() { /* @var $myPathController MyPathController */ (object) $myPathController = new MyPathController();
$items = array();
$items[$myPathController->path] = array( 'page callback' => 'my_callback_page', 'access callback' => 'user_access', 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, );
Príklad hook_menu
/* @var $myPathController MyPathController */(object) $myPathController = new MyPathController();
$link = l(‘Click me!’, $myPathController->path);// Yay! This code is safe!
Príklad DAO / Builder$query = "SELECT organization, country, activities, FROM statistics_partner_counts"; if ($country != NULL) { $query .= " WHERE country = '" . $country . "'"; if ($without_event === FALSE) { $query .= " AND activities != 0"; } } else { if ($without_event === FALSE) { $query .= " WHERE activities != 0"; } }
Príklad DAO / Builder
$query = db_select('statistics_partner_counts', 'partner_counts');
$query->addField('partner_counts', 'organization');$query->addField('partner_counts', 'country');$query->addField('partner_counts', 'activities');if ($country != NULL) { $query->condition('partner_counts.country', $country);}if ($without_event === FALSE) { $query->condition('partner_counts.activities', 0, '!=');}
Nevýhody a výhody
• viac riadkov kódu• performance
Nevýhody a výhody
• viac riadkov kódu• performance
• OOP fíčury• refaktorovateľnosť• autocomplete• chybovosť• kontinuita• noví členovia tímu
Kam to speje ?
• Drupal 8• Symfony 2
Ďakujem za pozornosť