SlideShare una empresa de Scribd logo
1 de 42
Drupal a OOP
  +
Dávid Lukáč
CTO @ Mogdesign.eu
david@mogdesign.eu
www.linkedin.com/in/davidlukac
www.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ť      Polymorfizmus




 Zapuzdrovanie
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    Zapuzdrovanie




   Abstrakcia
Prečo nám v tom OOP pomôže ?
   Hierarchia
Prečo nám v tom OOP pomôže ?
   Hierarchia       Kontinuita
Prax
Štruktúra adresára modulu
views/
includes/
Štruktúra adresára modulu
views/
includes/

classes/vars
classes/controllers
classes/models
classes/dao
classes/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 modul
classes/controllers/FormController.php
classes/controllers/PathController.php
classes/dao/DAO.php
classes/models/EntityWrapper.php
classes/models/Model.php
classes/models/NodeWrapper.php
classes/models/Singleton.php
classes/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   •   OOP fíčury
•   performance         •   refaktorovateľnosť
                        •   autocomplete
                        •   chybovosť
                        •   kontinuita
                        •   noví členovia tímu
Kam to speje ?
•   Drupal 8
•   Symfony 2
Ďakujem
za pozornosť

Más contenido relacionado

Similar a Drupal a OOP [DrupalCamp SK 2013]

Require.JS & Backbone.JS
Require.JS & Backbone.JSRequire.JS & Backbone.JS
Require.JS & Backbone.JSsrigi
 
Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Jano Suchal
 
Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...
Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...
Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...Catana0605
 
Drupal ako nízkonákladová platforma pre business web aplikácie
Drupal ako nízkonákladová platforma pre business web aplikácieDrupal ako nízkonákladová platforma pre business web aplikácie
Drupal ako nízkonákladová platforma pre business web aplikácieJozef Toth
 
Respnsive webdesign (Ivan Potančok)
Respnsive webdesign (Ivan Potančok)Respnsive webdesign (Ivan Potančok)
Respnsive webdesign (Ivan Potančok)Savione
 
Respnsive webdesign (Ivan Potančok)
Respnsive webdesign (Ivan Potančok)Respnsive webdesign (Ivan Potančok)
Respnsive webdesign (Ivan Potančok)wcsk
 
Node.js @ Rubyslava
Node.js @ RubyslavaNode.js @ Rubyslava
Node.js @ RubyslavaIvan Srba
 
Ako si zjednodušiť tvorbu webov a ako ich zmeniť na zisk? (Miro Veselý)
Ako si zjednodušiť tvorbu webov a ako ich zmeniť na zisk? (Miro Veselý)Ako si zjednodušiť tvorbu webov a ako ich zmeniť na zisk? (Miro Veselý)
Ako si zjednodušiť tvorbu webov a ako ich zmeniť na zisk? (Miro Veselý)wcsk
 
responsive webdesign - vibration.sk
responsive webdesign - vibration.skresponsive webdesign - vibration.sk
responsive webdesign - vibration.skvibration.sk
 
Cucumber - Testovanie webových aplikácií
Cucumber - Testovanie webových aplikáciíCucumber - Testovanie webových aplikácií
Cucumber - Testovanie webových aplikáciíPeter Študent
 
Kontrola kvality webového projektu - Ivan Potančok - WordCamp2015
Kontrola kvality webového projektu� - Ivan Potančok - WordCamp2015Kontrola kvality webového projektu� - Ivan Potančok - WordCamp2015
Kontrola kvality webového projektu - Ivan Potančok - WordCamp2015vibration.sk
 
Prezentácia: Ruby on RAils
Prezentácia: Ruby on RAilsPrezentácia: Ruby on RAils
Prezentácia: Ruby on RAilsguest3604661
 
AppMonitor Insight Edition
AppMonitor Insight EditionAppMonitor Insight Edition
AppMonitor Insight EditionAdam Lieskovsky
 

Similar a Drupal a OOP [DrupalCamp SK 2013] (17)

Require.JS & Backbone.JS
Require.JS & Backbone.JSRequire.JS & Backbone.JS
Require.JS & Backbone.JS
 
Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?Aký programovací jazyk a framework si vybrať a prečo?
Aký programovací jazyk a framework si vybrať a prečo?
 
Ro r
Ro rRo r
Ro r
 
Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...
Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...
Návrh a realizácia web stránky skriptovacím jazykom PHP vrátane administračné...
 
Drupal ako nízkonákladová platforma pre business web aplikácie
Drupal ako nízkonákladová platforma pre business web aplikácieDrupal ako nízkonákladová platforma pre business web aplikácie
Drupal ako nízkonákladová platforma pre business web aplikácie
 
Respnsive webdesign (Ivan Potančok)
Respnsive webdesign (Ivan Potančok)Respnsive webdesign (Ivan Potančok)
Respnsive webdesign (Ivan Potančok)
 
Respnsive webdesign (Ivan Potančok)
Respnsive webdesign (Ivan Potančok)Respnsive webdesign (Ivan Potančok)
Respnsive webdesign (Ivan Potančok)
 
Node.js @ Rubyslava
Node.js @ RubyslavaNode.js @ Rubyslava
Node.js @ Rubyslava
 
Analytika
AnalytikaAnalytika
Analytika
 
Ako si zjednodušiť tvorbu webov a ako ich zmeniť na zisk? (Miro Veselý)
Ako si zjednodušiť tvorbu webov a ako ich zmeniť na zisk? (Miro Veselý)Ako si zjednodušiť tvorbu webov a ako ich zmeniť na zisk? (Miro Veselý)
Ako si zjednodušiť tvorbu webov a ako ich zmeniť na zisk? (Miro Veselý)
 
Tastypie
TastypieTastypie
Tastypie
 
responsive webdesign - vibration.sk
responsive webdesign - vibration.skresponsive webdesign - vibration.sk
responsive webdesign - vibration.sk
 
Cucumber - Testovanie webových aplikácií
Cucumber - Testovanie webových aplikáciíCucumber - Testovanie webových aplikácií
Cucumber - Testovanie webových aplikácií
 
Kontrola kvality webového projektu - Ivan Potančok - WordCamp2015
Kontrola kvality webového projektu� - Ivan Potančok - WordCamp2015Kontrola kvality webového projektu� - Ivan Potančok - WordCamp2015
Kontrola kvality webového projektu - Ivan Potančok - WordCamp2015
 
Prezentácia: Ruby on RAils
Prezentácia: Ruby on RAilsPrezentácia: Ruby on RAils
Prezentácia: Ruby on RAils
 
AppMonitor Insight Edition
AppMonitor Insight EditionAppMonitor Insight Edition
AppMonitor Insight Edition
 
Nehacknutelny web
Nehacknutelny webNehacknutelny web
Nehacknutelny web
 

Drupal a OOP [DrupalCamp SK 2013]