![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
MyDarkSide |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 21.3.2008 Репутация: -1 Всего: -1 |
Думаю сейчас над реализацией моделей в своем фреймворке MVC.
Пришла в голову интересная идея: статические методы модели отвечают за выборку данных из множества. А обычные члены класса реализуют сам объект модели (т.е. сущность)
следующий шаг естественно вынести методы типа getById() в базовый класс
и тут я познал дзен - комменты в AbstractModel::getById() получается как в старом анекдоте: ни денег, ни топора и вроде все правильно. |
||||
|
|||||
awdev |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 22.11.2009 Репутация: нет Всего: 1 |
в чем вопрос?
|
|||
|
||||
NewDima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
Пространства имен абстрактных членов классов разных уровней наследования не совпадают
|
|||
|
||||
NewDima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
я бы сделал как-то так
|
|||
|
||||
awdev |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 22.11.2009 Репутация: нет Всего: 1 |
Вот так и создаются ### фрейморки
![]() По сабжу, автор не изобретай велосипед, посмотри как сделано удобно у других и сделай так же или поучись там где это работает уже хорошо. |
|||
|
||||
NewDima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
awdev, комментируя чей-то код, выкладывай аргументы. Голые твои слова стоят ровным счетом ничего. Это на тему ### кода.
Холеварить на тему "стоит ли писать самостоятельно велосипеды" не буду, потому что для меня здесь ответ очевиден. MyDarkSide, Зачем создавать тему, в которой потом не отписываешься? Нравится, когда пинают репутацию? |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Магический метод __callStatic() тоже только в PHP 5.3 доступен.
А вообще это избитый вопрос. Ответ: никак нельзя, только переходить на PHP 5.3 |
|||
|
||||
awdev |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 22.11.2009 Репутация: нет Всего: 1 |
Вся бизнес логика должна быть спрятана в модели. Моделями управляет контроллер, какой когда запустить, собрать данные и отправить в отображение. Отсюда следует что конструктор у моделей может быть разный. Во вторых этот способ не абстрагируется. Сегодня мне нужно из БД, завтра считать с XML файла послезавтра вообще передумаю и буду брать через SOAP, в классической постановке мы меняем одну модель на другую в контроллере. Или вместо new News(new XMLClient) написали new News(new SOAPClient) и все пашет. Все остальное - остается неизменным, ваш же код будет вызывать один и тот же класс. Например мне нужно получить Новость по ID: Будет вызвано: return NewsModel(array("ID"=>10)); Или вообще захочу игнорировать все запросы. Изменить в контролере вызов NewsModel на NewsModelBlackHole - все. А у вас надо будет модель перезаписывать. То есть если я передумаю использовать эту модель, и захочу другую - мне придется перезаписывать файл NewsModel. Что, как мне кажется, не очень красиво и правильно. Это сообщение отредактировал(а) awdev - 10.12.2009, 16:26 |
||||
|
|||||
NewDima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
awdev, а ты не заметил, что перед кодом я написал "как то так"? Это значит что это только смысл кода, почти псевдокод. Это одно. Другое: я ответил на вопрос топикстартера так, как он был поставлен, остальное - его проблемы.
sTa1kEr, а вы пишете для версий ниже?! Добавлено через 4 минуты и 25 секунд Вообще, создается впечатление, что большинство программистов пишут под четверку и даже горядтся этим... |
|||
|
||||
awdev |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 22.11.2009 Репутация: нет Всего: 1 |
NewDima, я не понимаю почему Вы пишите сообщение на "ты"?
Во вторых я не хотел доказывать или что-либо еще, я лишь написал видимые для меня недостатки Вашего кода. Если вы хотели написать это как псевдокод, то это не прочиталось. В любое случае, я надеюсь ответ ТС был дан. |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Ну вопрос задал не я, а ТС и судя поон пишет на версии ниже. Добавлено через 1 минуту и 8 секунд Но в этом нет ничего плохого, т.к. версия 5.3 еще очень сырая. |
|||
|
||||
MyDarkSide |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 21.3.2008 Репутация: -1 Всего: -1 |
вообще я работаю 8 часовой день, и отвечать ежечасно не могу, только вечером, днем если - только если свободная минута. к тому же обдумывал свои варианты как извратиться. Пнуть ума большого не надо. Господа холиваров не надо, пост серьезный. Принципиально пишу рамку только под пятерку, но затачивать совсем уж под самую последнюю, кажется тоже перебор. Кто виноват и что делать ? Виноват я (может нарушаю какие то концепции ООП) или ZendCo (не продумали)-на это наталкивает то что в 5.3 появилась функция get_called_class() ? что делать: изначальная идея плохая и допиливать нет смысла или идея хорошая надо допиливать реализацию ? Добавлено через 10 минут и 29 секунд именно такие рамки и сподвигли написать своё. последнее время приходится много работать с cakePHP и больше всего бесит что, весь фреймворк типа ОО а данные из моделей возвращаются в виде ассоциативных массивов. И в итоге такой отстой получается:
вообще в чем основная фишка, из тех рамок что я сомтрел, никто не разделяет по сути два разных класса: класс связанный с каким-то единственным объектом реальности (User, Post etc) - собственно модель, этот класс моделирует поведение объекта (метод isOnline() ) , и класс-коллекция однородных классов-моделей, который занимается выборкой, сохранением, ассоциированием ит.д. (метод getById() ) Это сообщение отредактировал(а) MyDarkSide - 10.12.2009, 18:13 |
||||
|
|||||
NewDima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
это при том, что в других ветках ты участвуешь, а в своей нет? |
|||
|
||||
MyDarkSide |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 21.3.2008 Репутация: -1 Всего: -1 |
по большому в данном случае версия 5.3 не сильно спасет потому что, использование get_called_class все равно похоже на какой-то костыль.
Т.е. когда речь идет о простых классах и членах, то класс-потомок переопределяет одноименные члены класса-родителя, другие же наследует т.е. включает в себя. А со статическими членами - поведение почему то другое. И тут возникает вопрос - поведение от Zend'a (когда механизм наследования по сути не работает в статических членах ) - правильное и соответствует каким-то догмам ООП (может быть в других языках такая же ситуация), или это все-таки не доработки |
|||
|
||||
awdev |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 22.11.2009 Репутация: нет Всего: 1 |
Ну почему, работает, члены передаются потомкам, но получается их нельзя переопределить, и стат методы выполняются в контексте того класса, где они были объявлены изначально. |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |