За последние 24 часа нас посетил 40991 программист и 1283 робота. Сейчас ищут 1316 программистов ...

Архитектура движка. Организация.

Тема в разделе "Вопросы от блондинок", создана пользователем running-frag, 28 окт 2009.

  1. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    Хотел бы узнать. Есть ли смысл создавать движ по классу. Т.е. в index создаётся класс, с кучей всего. Там всякие таблички, выводы, расчёты. При чём, заходит минимум данных, обратабываются и выплёвывает уже конечная инфа передающиеся в смарти (или другому шаблонизатору, не столь важно). При этом хотел бы узнать плюсы и минусы такой системы. Ваши идеи почему "хорошо" и почему "плохо" ....

    На данный момент у меня не так. Есть к примеру страница items.php в которой обрабатывается только то что указано в ней, на неё входят $_POST/$_GET + db connect. Если же я инклудю её в другой странице то много "лишнего подключается" (хотя оно и не мешает, но всё же лишнее). Если взять слова выше то items.php превратится в "метод" (если я правильно трактую понятие метода) класса создаваемом index'ом.

    Хотел бы услышать ваши мысли на этот счёт.
     
  2. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    слабое понимание что такое архитектура вообще.

    почитайте хоть инфу какую на эту тему прежде чем постить?
     
  3. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    И зачем? Что б потом опять придти спрашивать, а вы "такие все умные" опять "иди читай дальше".. Теперь видно откуда такие цыфры в кол. постах.

    Лучше уж тогда ссылкой послали, а не перенося топик.. =\

    PS: Сейчас читаю http://habrahabr.ru/blogs/about_cms/51152/ ...
     
  4. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    Почитай http://habrahabr.ru/blogs/php/31270/ . Кое-что не раскрыто, кое-что раскрыто достаточно сумубрно, кое-что неверно, а кое-что некрасиво, но в какую сторону копать, чтобы найти верные/интересные идеи — представление мне дало.
     
  5. kostyl

    kostyl Guest

    running-frag
    правильно излагать мысли надо уметь для начала, а не выплевывать...
    Херовая задумка у тебя.
     
  6. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    LOL
    Ну то что мне и нужно было. "Подсрачника и манки"... Всё уже, куда бежать и над чем думать уяснил. СПС...
     
  7. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    running-frag
    Зря ерепенишься.

    Обсуждать что-либо можно с теми кто примерно равного с тобой уровня.

    В остальных случаях ты или объясняешь что делать, или тебе объясняют что делать.

    Но для того чтобы тебе объяснили - нужно таки уметь формулировать свои мысли. У тебя сейчас недостаток общей терминологии.
    То, что ты поднял в топике - не имеет отношения к архитектуре движков вовсе. Но имеет отношение к парадигме программирования - ООП. (распространенное явление - заголовок спрашивает об одном, а пост совершенно о другом).

    А из-за твоего вопроса, тебя таки послали (и ты сам полез) читать о движках.
    Хотя стоило бы начать с ООП. Потому что объяснение того же MVC, Registry да и вообще почти всех паттернов идет на ООП-примерах.

    А реализовать тот же MVC можно и процедурно...
     
  8. kostyl

    kostyl Guest

    Simpliest
    сначала ему надо прочитать хоть одну книжку...
     
  9. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    Ну в терминологии, это да, я явно не знаюсь.
    Ты меня походу не правильно понял. :) После поста 440Hz я уже понял что моих знаний не хватает. ;) Образование к сожалению другое. Мне нужны "подсказки" в виде сыллко где читать и наводки на что обратить внимание. Фишки типа "напишите за меня" не катят...
    Отсюда
    Никаких там "ерепенишься" (с) всё ровно. ;)
     
  10. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    running-frag, чем тебя не устраивает моя ссылка?
     
  11. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Это не обязательно. Я книжек не читал.
     
  12. kostyl

    kostyl Guest

    Simpliest
    ну можно не тупо книгу а подобное чё то...
     
  13. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  14. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    Mr.M.I.T.
    О! "ЕС! Ес .... Гёрл, гёрл..." (с) СПС, будем думать головой.... :))

    TheShock
    А кто сказал что меня не устраивает? Я букую всё. :) И читаю. ^_^
     
  15. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    Тут такое дело... Короче я зациклился на одном и не могу решить это. Точнее не могу понять саму логику процесса. :(
    Допустим есть два класса (могут быть ошибки в коде, но это сейчас не столь важно, меня интересуеют сама логика).

    Класс DB

    PHP:
    1.  
    2. <?php
    3. class db_connect
    4. {
    5.  
    6. var $num_rows   = 0;
    7. var $connectID  = 0;
    8. var $queryID    = 0;
    9.  
    10. // connect db  
    11. function connect ($host, $user, $pass, $name)
    12. {
    13.     $this->host = $host;
    14.     $this->user = $user;
    15.     $this->pass = $pass;
    16.     $this->name = $name;
    17.     $_link = FALSE;
    18.    
    19.     $this->connectID = @mysql_connect($this->host, $this->user, $this->pass, $_link);
    20.    
    21.     if (!$this->connectID)
    22.     {  
    23.         print "Could not connect to server: <b>{$this->host}</b>.<br>";
    24.         exit;
    25.     }
    26.     //else { print "Connected to server...<br>"; }
    27.  
    28.     if(!@mysql_select_db ($this->name, $this->connectID))
    29.     {  
    30.         print "Could not open database: <b>{$this->name}</b>.<br>";
    31.         exit;
    32.     }
    33.     //else { print "DB selected...<br>"; }
    34.  
    35.     // unset data
    36.     unset($this->host);
    37.     unset($this->user);
    38.     unset($this->pass);
    39.     unset($this->name);
    40. }
    41.  
    42. function query($_sql)
    43. {  
    44.     $_qry = @mysql_query($_sql, $this->connectID);
    45.     if (!$_qry)
    46.     {
    47.         return FALSE;
    48.     }
    49.     else
    50.     {
    51.         $this->queryID = $_qry;
    52.         $this->num_rows = @mysql_num_rows($this->queryID);
    53.     }
    54. }
    55.  
    56. function fetch_array_all()
    57. {                        
    58.     if ($this->queryID)
    59.     {  
    60.         while ($_row = mysql_fetch_assoc($this->queryID))
    61.         {
    62.             $_return[] = $_row;
    63.         }
    64.        
    65.         return $_return;
    66.     }
    67.     else { print "\$this->queryID not isset.<br>"; }
    68. }
    69. ?>
    70.  
    И есть какое то подобие на контроллер... (код чужой, взят с http://chtivo.webhost.ru/articles/mvc.php)

    PHP:
    1.  
    2. <?php
    3. class Controller {
    4.  
    5. private $error;
    6. private $result;
    7.  
    8.     function __construct() {
    9.    
    10.         $this->error = false;
    11.         $this->result = false;
    12.    
    13.     }
    14.  
    15.  
    16.  
    17.     function processData() {
    18.    
    19.         $this->userRequest();
    20.        
    21.         if ($this->error)
    22.             View::displayError($this->error);
    23.         else
    24.         if ($this->result)
    25.             View::displayResults($this->result);
    26.         else
    27.             View::displayDefault();
    28.    
    29.     }
    30.    
    31.     function userRequest() {
    32.    
    33.         // данные отправлены
    34.         if (isset($_POST['send'])) {
    35.    
    36.             $this->validate();
    37.            
    38.             if (!$this->error) {
    39.            
    40.                 // основные вычисления
    41.                 $model = new Model();
    42.                 $model->calculate($_POST['name']);
    43.                 $result = $model->getData();
    44.                
    45.                 // проверка на ошибки в самой модели
    46.                 if (!is_array($result))
    47.                     $this->error = $result;
    48.                    
    49.                 else
    50.                     $this->result = $result;
    51.            
    52.             }
    53.         }
    54.     }
    55.    
    56.     function validate() {
    57.    
    58.         if (empty($_POST['name']))
    59.             $this->error = 'Не введено имя!';
    60.         else   
    61.         if (strlen(strval($_POST['name'])) < 3)
    62.             $this->error = 'Имя слишком короткое!';
    63.    
    64.     }
    65.  
    66. } // class Controller
    67.  
    68.  
    69. class View {
    70.  
    71.     static function displayDefault() {
    72.    
    73.         echo "<form method='POST' action=''>";
    74.         echo "<p>Введите имя:  ";
    75.         echo "<input type='text' name='name' value=''>  ";
    76.         echo "<input type='submit' name='send' value='Отправить'>";
    77.         echo "</form>";
    78.    
    79.     }
    80.    
    81.     static function displayError($error) {
    82.    
    83.         echo "<p><b>Ошибка:</b> {$error}";
    84.         View::displayDefault();
    85.     }
    86.    
    87.     static function displayResults($results) {
    88.    
    89.         echo "<p><b>Результаты:</b>";
    90.         echo "<p>Ваше имя <b>".$results[0].
    91.             "</b> означает <i>".$results[1]."</i>";
    92.         echo "<p><a href='".$_SERVER['REQUEST_URI'].
    93.                     "'>Узнать ещё об одном имени</a>";
    94.     }  
    95.  
    96. } // class View
    97.  
    98.  
    99. class Model {
    100.  
    101. private $data;
    102.  
    103.     function __construct() {
    104.    
    105.         $this->data = false;
    106.    
    107.     }
    108.  
    109.     function calculate($name) {
    110.    
    111.         $this->data[] = $name;
    112.    
    113.         $len = strlen($name);
    114.    
    115.         if ($len == 3)
    116.             $this->data[] = 'краткость - сестра таланта';
    117.         else
    118.         if (($len > 3) && ($len < 6))
    119.             $this->data[] = '...нет особого значения';
    120.         else
    121.             $this->data[] = 'невероятно богатая фантазия родителей';
    122.     }
    123.  
    124.     function getData() {
    125.    
    126.         if ($this->data)
    127.             return $this->data;
    128.         else
    129.             return 'Вычисления не произведены!';
    130.    
    131.     }
    132.  
    133. } // class Model
    134.  
    135.  
    136. $controller = new Controller();
    137.  
    138. $controller->processData();
    139.  
    140. ?>
    В контролере наглядно видно что можно в любой части кода вызвать view::XXXX , а вот как сделать для моего класса бд? Вторые сутки не могу ответа найти. :( Скорее не найти а додуматься.. =\
     
  16. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    Да... И исключаем тот случай когда...

    PHP:
    1.  
    2.  <?php
    3.  class db_connect
    4.  {
    5.  
    6.  var $num_rows  = 0;
    7.  var $connectID  = 0;
    8.  var $queryID    = 0;
    9.  
    10.  // connect db  
    11.  function connect ()
    12.  {
    13.      $this->host = "host";
    14.      $this->user = "user";
    15.      $this->pass = "pass";
    16.      $this->name = "db_name";
    17.      $_link = FALSE;
    18.  
    19. ...
    20. ?>
    21.  
     
  17. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    тебе надо смотреть в сторону синглетона

    PHP:
    1.  
    2. <?php
    3.  
    4. class Db {
    5.  
    6.  
    7.     static function getInstance() {
    8.  
    9.         static $instance = false;
    10.  
    11.         if($instance === false)
    12.             $instance = new Db();
    13.  
    14.         return $instance;
    15.  
    16.     }
    17.  
    18. }
    19.  
    20.  

    и потом в любом месте кода пишешь Db::GetInstance()->Query('SELECT...');

    только надо обработать connect() правильно

    т.е. в любом методе смотреть есть ли коннект или если его нет, коннектиться
     
  18. kostyl

    kostyl Guest

    running-frag
    лучше почитай, так быстрее будет, чем спрашивать как joost пол года всякую херню....
     
  19. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    440Hz
    СПС большое. Гугл много интересного по этой теме показал. :) Будем дальше читать. XD

    kostyl
    "Лучше почитай" (с)
    Капитан очевидность сегодня нас не посетил. :( Читать всё подрят это хорошо, много чего интересного можно узнать. Но только не по делу. Сейчас я приследую определённую цель, линк на хороший пример оказался бы намного лучше твоего поста выше. :(

    PS: СПС хоть не посылаете. ^_^
     
  20. kostyl

    kostyl Guest

    running-frag
    базара нет, какие проблемы !
     
  21. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    иди нах...
    =)
     
  22. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    В общем виде получил вот такое:
    PHP:
    1.  
    2. <?php
    3. class db
    4. {
    5.     var $num_rows   = 0;
    6.     var $connectID  = 0;
    7.     var $queryID    = 0;
    8.    
    9.     private static $inst = NULL;
    10.     private function __construct() {}        
    11.     private function __clone () {}
    12.    
    13.     public static function check ()
    14.     {
    15.         if (self::$inst == NULL)
    16.         {
    17.             self::$inst = new db ();
    18.         }
    19.         return self::$inst;
    20.     }
    21.  
    22.     public function connect ($host, $user, $pass, $name) {}
    23.     public function query ($_sql)  {}
    24.     public function fetch_all ()  {}
    25.     public function fetch ($rowSeek)  {}
    26.     private function free_result ()  {}
    27. }  
    28.  
    29. db::check()->connect("host", "user", "pass", "db_name");
    30. db::check()->connectID;
    31. $_sql = "select * from _users";
    32.  
    33. db::check()->query($_sql);
    34. //db::check()->queryID;
    35. db::check()->fetch_all();
    36. db::check()->fetch(0);
    37.  
    38. ?>
    39.  
    PS:440hz ещё раз спс за подсказку. :)
     
  23. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    конструктор объяви приватным.
    А то наинстанцируешь себе синглтонов.

    upd: прошу прощения, не заметил. все там на месте.
     
  24. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    var $num_rows = 0;
    =>
    public $num_rows = 0;
     
  25. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Нет архитектуры кроме MVC и синглтон пророк её.
    =)