Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сомнения при проектировании движка, Сомнения при проектировании движка 
:(
    Опции темы
Muchenik
Дата 12.1.2007, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 27.10.2005

Репутация: нет
Всего: 5



У меня возникли сомнения в правильности проектирования. Хотелось бы узнать точку зрения народа.

Ситуация такая. Есть главный класс движка ( к примеру Admin ), который в зависимости от выбраой опции подключает модуль. Имя опции одинаковое с именем файла, в котором хранится модуль.


Код

class Admin{
    .................
    public function run(){
         $op_name = 'Users'   ; /* имя опции и файла модуля */
         require_once $op_name.".php";  /* подключаем класс модуля*/ !!!!!! вот в этой строчке у меня сомнения
    }
    .....
    
}


Проблемная строка вкладывает определение класса прямо в тело рабочей функции. Нормальное ли это явление или нет?  Других вариантов я не вижу.

Надеюсь внятно высловился. 


PM MAIL ICQ   Вверх
Mal Hack
Дата 12.1.2007, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Думаю, что это не шибко хорошо. 
Я вот делал так (вырезка из кода главного файла):
Код

<?php

    if( ! file_exists( "../cfg.php" ) )
    {    exit( "Configurtion file not found.");    }
        
    require( "../cfg.php" );
    
    $glURI = glGetURI( $_SERVER['REQUEST_URI'] , C_URL_ADMIN );
   
        if( 
            ! file_exists( C_PATH_ADMIN . "lng/" . C_LANGUAGE . "/lng." . C_LANGUAGE . ".global.php" ) ||
            ! file_exists( C_PATH_ADMIN . "skin/skin.global.php" ) ||
            ! file_exists( C_PATH_ADMIN . "sql/" . DB_DRIVER . "/sql.global.php" ) ||
            ! file_exists( C_PATH_ADMIN . "kernel.php" )
        )
        {    exit( "One or more system files not found.");    }

        require( C_PATH_ADMIN . "lng/" . C_LANGUAGE . "/lng." . C_LANGUAGE . ".global.php" );
        require( C_PATH_ADMIN . "skin/skin.global.php" );
        require( C_PATH_ADMIN . "sql/" . DB_DRIVER . "/sql.global.php" );
        require( C_PATH_ADMIN . "kernel.php" );

        if( ! empty( $glURI[0] ) )
        {
            if( 
                ! file_exists( C_PATH_ADMIN . "lng/" . C_LANGUAGE . "/lng." . C_LANGUAGE . "." . $glURI[0] . ".php" ) ||
                ! file_exists( C_PATH_ADMIN . "skin/skin." . $glURI[0] . ".php" ) ||
                ! file_exists( C_PATH_ADMIN . "sql/" . DB_DRIVER . "/sql." . $glURI[0] . ".php" ) ||
                ! file_exists( C_PATH_ADMIN . "ext/ext." . $glURI[0] . ".php" )
               )
            {    exit( "One or more modul files not found.");    }
            else 
            {
                include( C_PATH_ADMIN . "lng/" . C_LANGUAGE . "/lng." . C_LANGUAGE . "." . $glURI[0] . ".php" );
                include( C_PATH_ADMIN . "skin/skin." . $glURI[0] . ".php" );
                include( C_PATH_ADMIN . "sql/" . DB_DRIVER . "/sql." . $glURI[0] . ".php" );
                include( C_PATH_ADMIN . "ext/ext." . $glURI[0] . ".php" );
                
                $Modul = new clModul( $lng_modul );
            }
        }
        else 
        {    
            $Modul = null;    
            $lng_modul = array();
        }
        
        $Kernel = new clKernel( $Modul , $PDO , $lng_global , $glURI );
    }
 
?>

PM ICQ   Вверх
Glip
Дата 12.1.2007, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: нет
Всего: 18



мне кажется или дублирование кода?


--------------------
user posted image
PM MAIL   Вверх
Muchenik
Дата 12.1.2007, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 27.10.2005

Репутация: нет
Всего: 5



Да хотелось как можно строже придержаться ООП. 
Главный файл у меня такого плана:

Код

$admin = new Admin();
$admin->run();


Я наверное сделаю так
Код

class Admin{
  function __construct(){
   /* тут определю какой модуль мне поключать */
  }

   public function includeModuleSource(){
        require_once "имя файла модуля";
  }
}


А потом в главном файле

Код

$admin = new Admin();
$admin->includeModuleSource(); /* подключаю код класса */
$admin->run();


Добавлено @ 00:02 
Цитата(Glip @ 12.1.2007,  23:57)
мне кажется или дублирование кода?

Поконкретней плиз. Что, где, почему?
PM MAIL ICQ   Вверх
Glip
Дата 13.1.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: нет
Всего: 18



а __autoload не подойдет?

http://ru.php.net/manual/en/language.oop5.autoload.php

Добавлено @ 00:05 
Muchenik, дублирование, это я про пример Mal Hack 


--------------------
user posted image
PM MAIL   Вверх
Mal Hack
Дата 13.1.2007, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Цитата(Glip @  13.1.2007,  00:04 Найти цитируемый пост)
Muchenik, дублирование, это я про пример Mal Hack  

Никакого дублирования там нет. Одно дело - главные файлы, другое дело модульные.

Цитата(Muchenik @  12.1.2007,  23:59 Найти цитируемый пост)
Да хотелось как можно строже придержаться ООП. 

А что у меня это нет? 
PM ICQ   Вверх
Muchenik
Дата 16.1.2007, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 27.10.2005

Репутация: нет
Всего: 5



Цитата(Glip @ 13.1.2007,  00:04)
а __autoload не подойдет?

http://ru.php.net/manual/en/language.oop5.autoload.php

Добавлено @ 00:05 
Muchenik, дублирование, это я про пример Mal Hack

Дело в том, что помимо самого модуля (класса) мне нужно подгружать настройки для этого модуля из отдельного файла и использовать их как глобальные переменные. Т.е. примерно так:

Код

function __autoload($class_name){
    
    /* load module config */
    if (file_exists(ADMIN_MOD_DIR.$class_name.'/'.$class_name.'.config.php')){
        require_once ADMIN_MOD_DIR.$class_name.'/'.$class_name.'.config.php';
    }
    
    /* load module source */
    require_once ADMIN_MOD_DIR.$class_name.'/'.$class_name.'.class.php'; 
}


Но  __autoload загружает все в свою область видимости и я недоберусь к конфигу модуля.  Как это можно обойти???
PM MAIL ICQ   Вверх
Mal Hack
Дата 16.1.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Muchenik, делай как я показал выше и будет тебе счастье.

PM ICQ   Вверх
Nchanged
Дата 23.1.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 9.2.2006

Репутация: нет
Всего: нет



Господа, вы только засоряете код этими классами, которые занимаются совершенно ненужными действиями.

У меня модули подключаются в завимимости от $_GET["mod"]; Т.е следущим образом:

Код

switch ($mod) {
case "main":
    include_once("./system/img.php");
    break;
 }


Это сделано на системный файлы, типа запрос на картинку и пр. А так - все данные хрянятся в Mysql. По всем модулям.

Это сообщение отредактировал(а) Nchanged - 23.1.2007, 11:49
PM MAIL   Вверх
AztEK
Дата 23.1.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: нет
Всего: 18



Это ущербный подход. Нормально масштабируемый проект так не сделать.


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Vaulter
Дата 23.1.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



главный класс это вообще звучит как нонсенс PHP ООП smile
ЗАЧЕМ? как уже спросили выше.
__autoload + несколько вспомогательных классов + умело сделанная структура модулей+шаблонов+настроек
позволят Вам построить достаточно сложную систему весьма быстро 
используя (по желанию) как чистый ООП так и ОПП (обьектно процедурный подход)


--------------------
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0814 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.