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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синглтон или абстрактный класс для фронт-конт-ра! 
:(
    Опции темы
Kotakota
Дата 25.4.2011, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет!
Какой шаблон лучше применить для реализации фронт-контроллера в MVC.
Есть два на примете: Синглтон и абстрактный класс!
По ходу дела есть вопрос.
С синглтоном понятно!
А если применить абстрактный класс, то будет создаваться один экземпляр класса?

Код

<?php
Abstract Class Controller_Base {
function __construct() {
}

abstract function index();

}


?>


Код

<?php
Class Controller_Index_First Extends Controller_Base {

        function index() {

               echo 'Hello from my MVC system';

        }

}

?>


Код

<?php
Class Controller_Index_Second Extends Controller_Base {

        function index() {

               echo 'Hello from my MVC system';

        }

}

?>


В этом случае будет создан один экземпляр класса Controller_Base?
Или для каждого класса потомка свой экземпляр Controller_Base?

Это сообщение отредактировал(а) Kotakota - 25.4.2011, 13:36
PM MAIL   Вверх
Muerto
Дата 25.4.2011, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

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



Не понимаю как ты хочешь Singleton здесь использовать.

baseController должен быть абстрактным...


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


Шустрый
*


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

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



Цитата(Muerto @ 25.4.2011,  13:43)
Не понимаю как ты хочешь Singleton здесь использовать.

baseController должен быть абстрактным...

Вот так:
Код

Class Base_Controller {
protected static $instance; 
 public static function getInstance() {
        if ( is_null(self::$instance) ) {
            self::$instance = new self;
        }
        return self::$instance;
    }
public function doAction() {}
}


Код

<?php
Class Controller_Index_First {
        function index() {
               echo 'Hello from my MVC system';
        }

Base_Controller::getInstance()->doAction(); // Можно работать с методами фронт-контроллера!
}
?>


А при использовании абстрактных классов создается только один экземпляр класса?
PM MAIL   Вверх
Muerto
Дата 25.4.2011, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

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



Kotakota, Все же не могу понять что вы тут пытайтесь сделать, такое впечатление что не до конца понятно что такое MVC

 Singleton использовать не следует, это не верно, если вы собрались плодить Controller'ы( что не входит в классический MVC да и вообще не MVC Будет), то у каждого Controller'a должен быть свой state 


------

Суть в абстрактных классах в том что мы хотим использовать наследие, что бы не писать каждый раз код, и пытаемся вынести функционал который повторяется между нашими классами как можно выше по иерархии...

Пэтому пишется baseController с базовым функционалом, и затем он наследуется добавляя методы, которые отвечают за действия.

---
а вопрос "будет один экземляр класса или нет" - если у вас MVC классический, без велосипедов, то контроллер у вас будет вызываться за жизненный цикл, всего один.

если у вас дофига контроллеров вызывается , то наследовать функционал будет по новой, не зависимо от других  smile 

Это сообщение отредактировал(а) Muerto - 25.4.2011, 14:42


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


Шустрый
*


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

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



Цитата(Muerto @  25.4.2011,  14:40 Найти цитируемый пост)
а вопрос "будет один экземляр класса или нет" - если у вас MVC классический, без велосипедов, то контроллер у вас будет вызываться за жизненный цикл, всего один.

если у вас дофига контроллеров вызывается , то наследовать функционал будет по новой, не зависимо от других


Не понял этот момент.
Фронт-контроллер у меня один и есть еще контроллеры которые вызываются в зависимости от параметров в URI.
Я был всегда такого мнения, что экземпляр фронт-контроллера должен вызываться только один раз и все другие контроллеры потомки должны использовать только один экземпляр класса фронт контроллера.
В чем суть того, что каждый подчиненный контроллер должен создавать свой экземпляр фронт-контроллера?




PM MAIL   Вверх
Muerto
Дата 25.4.2011, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

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



Kotakota, Не нужно гадать  smile 
Возьмите какой нить MVC фреймворк и посмотрите как делается

Мой фреймворк работает вот так:

Есть index который по саути дела представляет из себя boostrap используя файл конфигураций, который создает instance ядра фреймворка.
Дальше идет раутер, который вызывает контроллер по тому что было получено по URL

---

Если у вас какой то фронт-контроллер , котоырй выполняет роль, ядра, или/и boostrap или/и раутинга, то не вижу пречины что бы он наследовал от куда то что то...

Если очень хотеть можно выявить общие свойства вашего фронт-контроллера и простых контроллеров, назвать это fatherController =-)

baseController Будет наследовать от father, а простые от base  smile 

Это сообщение отредактировал(а) Muerto - 25.4.2011, 19:28


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


Шустрый
*


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

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



У меня так:
Index (bootstrap) -> Фронт-контроллер->Роутер->Контроллер по URI
Фронт - контроллер сделал отцом smile от которого наследуются другие контроллеры.
У меня в коде фронт-контроллера происходит инициализация View и Router.
Мой фронт-контроллер, не абстрактный класс, а простой!
Мне не нужно абстрактные методы. Это нормально? Или базовый класс обязательно должен быть абстрактным?
Такая вот схема...


Это сообщение отредактировал(а) Kotakota - 25.4.2011, 21:32
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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