Эээ, а правильно я проектирую ядро двежка? (Зняю что боян)

Статус
В этой теме нельзя размещать новые ответы.

cyberface

Новичок
Эээ, а правильно я проектирую ядро двежка? (Зняю что боян)

:)
Вобщем имею след. ситуацию, год назад началь учить пхп с целью создания своего мегаСуперПуперИдиального портала, присоединился я к приятелю и стали мы делать такой сайт.
Однако все вылилось в установку нулленного движка и создание Очередного Варезно Развлекательного Сайта =). Сайтег просуществовал пару месяцефф, друзья пообщались на его форуме и фсе... забросил и я, и люди которые мне помогали.
Я подумал хорошенько, и начал писать нечто вроде своего движка, так как существовашие решения меня не устраивали. Писал я поначалу ужоснах всякий, потом купил книжку, и стал учиццо, вощем писал я движок когда мне делать было нефиг, переписывал его раз 20, да так и не написал =). Вернее работающия поделка есть но она нифига не движок, а просто какой-то ублюдочный скрипт, кторый нифига не расширяем и который писался с помощью древнейшего метода copy/paste. Меня это не устраивает, и решил я написать фсе заного. ПОэтому и обращаюсь к вам, великие магистры и мэтры пиэйчпиклаба.
Это была прилюдия, а теперь приступим.

Я хочу создать движок под себя, однако же, мне хочется что бы его обслуживание и сопровождение были легкими как перья олбанских куретс. Поэтому я решил что нужно делать модульную структуру (еще бы =) ). При этом я решил придерживаться идеолагии MVC, рассматривая модуль как совокупность модели и контроллера.


....Я продолжал быдлокодерстовать....


Отталкиваца я решил от УРЛ, так как думаю, что УРЛ основа логики.
УРЛы без реврайта у меня типа таких:

index.php?module=forums&forum=music&topic=123

первым параметром идет загружаемый модуль (module=forums ), за ним идут методы контроллера (forum=music&topic=123 ). Собственно как вы видите в урле у нас перечисленны два метода контрллера. Но какой из них нужно запустить? Я решил что надо запустить последний, потому что, по идее, именно он ответсвеннен за то, что мы должны в данный момент увидеть на экране. Таким образом я в первую очередь анализирую УРЛу, определяю модуль, который нам необходимо подгрузить, создаю модель и контроллер, запускаю роутер, который парсит УРЛу и грузит правильно выбранный метод контроллера.
Контроллер сами понимаете че делает - тащит данный из модели и сует их в вид (view)


Правильно ли я сделал? Если правильно, то я даже хочу вам показать для оценки свой быдлоООПкод.
 

cyberface

Новичок
Нет, я серьезно. Я присматривался к CodeIgniter, как к наиболее понятному фреймворку для меня тупого. Но КодоПоджигатель не дает мне той свободы, которую я бы хотел, так как релизация именно того, чего мне надо потребовала бы применения всяких вещей и извращений, которые мне кажутся лишними. Просто мне нужен совет, или пошлите меня по ссылке, чтобы читануть букаф и зациклить моск.
 

cyberface

Новичок
М-да, очевидно, мне придется отвыкать от языка подонков, потому что на этом форуме меня всерьез не воспримут. Ну и ладно. Собственно, я всего лишь хотел от вас узнать, правильный ли тот подход, о котором я рассказал в самом начале. А именно – если у нас есть многоуровневая структура сайта, доступ к вложенным элементам осуществляется через добавление дополнительного параметра в URI (т.е. по сути как в обычной файловой системе), то стоит ли запускать метод контроллера, одноименного с самым последним параметром?
Проще говоря, я для универсализации принял название параметра в URI равным именю вызываемого метода контроллера.
Т.е. Предположим, имеем такую строку запроса:
index.php?module=news&category=software
Согласно моему видению ситуации, скрипт должен загрузить модуль news и передать управление методу новостного контроллера ( News_Control ), в данном случае этот метод «category» [ News_Control::category() ]
Если же строка запроса выглядит так:
index.php?module=news&category=software&order=rating
То News_Control запустит метод News_Control::order , а не метод News_Control::category
 

tf

крылья рулят
[невнимателен]

-~{}~ 17.04.07 22:06:

у нас чем занимается?
и в чем разница
меня интересуют насколько команды равноценным и как сваимосвязаны

и почему было принято считать команды сначало левую
а потом справо до левой?
 

cyberface

Новичок
занимается вызовом метода (category), он там смотит че в URI, принимает переданную ему категорию (software) и выводит новости из категории, которая помечена как software.

и в чем разница
News_Control:eek:rder
News_Control::category
Тем что это два разных метода, выводящих на экран разную информацию...


и почему было принято считать команды сначало левую
а потом справо до левой?
потомучто я тупой быдлокодер, я не могу никак понять, как сделать так чтоб автоматизировать процесс вызывания методов. Или вообюще просто автоматизировать процесс шоб не писать везде
PHP:
if($_GET['category']){
//do smth
}
if($_GET['category'] && ($_GET['order']){
//order
}
-~{}~ 17.04.07 22:18:

меня интересуют насколько команды равноценным и как сваимосвязаны
Вот именно, они не как не взаимосвязанны =(. Просто одна выводит новости из категории, а другая выводит новости из категории, но уже отсортированные =)
 

cyberface

Новичок
Быть может он и лишний, но мне хотелось бы что бы URL у меня были словно папки ф файловой системе - от большего к мешьшему. Т.е. взять тот же URL

index.php?module=forums&forum=music&topic=123

с помощью реврайта превратится в
/forums/music/123
(index.php?module=forums&forum=music&topic=123)
По этому адресу будет доступна тема моего долбофорума.

/forums/music
(index.php?module=forums&forum=music)
Тут списки тем форума



/forums
(index.php?module=forums)
А тут список форумов

вот такъ :/
 

Alexandre

PHPПенсионер
в принципе идея правильная, если я правильно понял расклад
/forums/music/123
(index.php?module=forums&forum=music&topic=123)
подгружаем класс forums
вызывыаем метод forum( )
передаем параметр в метод music, , array (topic=>123 )

/forums/music
(index.php?module=forums&forum=music)
подгружаем класс forums
вызывыаем метод по умолчанию

index.php?module=news&category=software
подгружаем класс news
вызывыаем метод category
передаем в метод software

index.php?module=news&category=software&order=rating
подгружаем класс news
вызывыаем метод category
передаем в метод software , array (order=>rating )

index.php?module=superclass&supermethod=base_param&p1=value1&p2=value2

парсим как
подгружаем класс superclass
вызывыаем метод supermethod
передаем в метод base_param , array (p1=>value1, p2=>value2)

передаем в метод один или два параметра, один основной, либо дополнительным параметром может быть ассоциативный массив параметров.
 

ONK

Пассивист PHPСluba
Alexandre, если развить эту идею, то для того, чтобы получить доступ к частному придётся загрузить всю иерархию общего.

Нет смысла грузить класс forum если надо получить единственный экземпляр message принадлежащий некому topic.
 

Alexandre

PHPПенсионер
ONK согласен, в твоем варианте статические методы - лучше... (не знаю как быть правда с методом по умолчанию)
я идею высказал общую.
/forums/music/123
(index.php?module=forums&forum=music&topic=123)
$forums::forum ( 'music' , array( topic=>123 ) )

/forums/
(index.php?module=forums)
$forums::__call ( null , null) ;
 

bools

Новичок
подгружаем класс forums
вызывыаем метод forum( )
передаем параметр в метод music, , array (topic=>123 )
что должны делать эти методы? формировать данные для шаблона?
 

Alexandre

PHPПенсионер
что должны делать эти методы?
что им скажешь, то и будут делать.
формировать данные для шаблона?
в принципе да

если придерживаться идеалогии эМВиСи, то данные методы являются моделью, которая должна сформировать данные для отображения.

Между классом Модели и классом Отображения должен быть некий интерфейс.

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

В принципе это все условности... Можно сделать, как понятней и проще .
 

bools

Новичок
т.е. получается, что класс - это контроллер, методы - модель, представление - шаблон. так?
 

Alexandre

PHPПенсионер
т.е. получается, что класс - это контроллер, методы - модель, представление - шаблон. так?
не совсем, но где-то так

контроллер - это класс, отвечающий за
- проверку запросов ($_GET, $_POST )
- парсинг запросов ( например выбор имени метода из $_GET , формирование входных рараметров )
- подгрузку соответсвующего класса (require $_class_name )
- вызов соответсвующего метода класса

модель - мы уже разобрали.

есть два варианта отработки модели (реализация - дело вкуса)

- модель вызывает класс шаблона и формирует вывод самостоятельно.

- модель возвращает некую переменную (вложенный ассоциативный массив или xml), на основе значения которой формируется уже данные для шаблонизатора.
 

cyberface

Новичок
Я тут подумал, в принципе как я вызываю методы не так важно, главное чтобы работало и от мегакулхацкеров было защищено.

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

есть 4 (!) класса (можно сделать и статическими)
Model
View
Controller
Router

Model - представляет собой набор методов для получения и преобразования данных.

View - класс, ответственный за представление этих данных (в моем случае подгружает файл шаблона и "раставляет" в нем полученную информацию)

Controller - класс, который получает информацию от модели, возможноделает с ней что-нибудь, отправляет информацию в Отображение

Router - именно он в зависимости от ситуации определает какой метод контроллера нужно вызвать (проверка запросов, их парсинг, запуск контроллера),
 

Alexandre

PHPПенсионер
Насчет MVC... сколько я ни читал про MVC, но у каждого автора были немного разные подходы и видения этоого паттерна, вприницпе это нормально.
MVC - это парадигма, так сказать идея, воплощать ее монжо по разному.
есть 4 (!) класса
может быть гораздо больше. Есть несколько способов реализации этой парадигмы.

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

У тебя есть Новости, новости могут быть выведены как
- список анонсов
- новость полностью
Новости имеют категории (типы новостей)
- новости компании
- новинки в продажах

В зависимости от типа - свое представление.

Как ты в этом случае организуешь свою модель???
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху