drupal a oop [drupalcamp sk 2013]

Post on 12-Apr-2017

275 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Drupal a OOP +

Dávid LukáčCTO @ Mogdesign.eu

david@mogdesign.euwww.linkedin.com/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ť

top related