Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Об организации классов User
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Об организации классов User

Страниц (2): [1] 2 »
 

1. Bio man - 07 Июня, 2012 - 22:54:25 - перейти к сообщению
Скажите, зачем выносить loginUser() и logoutUser() в базовый класс контроллера? Просто поглядываю на код как на пример и мне не понятно зачем это. Не будет ли лучше сделать это в контроллере User?
2. EuGen - 07 Июня, 2012 - 23:05:01 - перейти к сообщению
Вопрос резонный. И ответ на него - безусловно, спорен. Приведу аргументы, которые были приняты мной при разработке архитектуры.
Логика, закладываемая в приложение - то, что сущность "Пользователь" - не участвует в создании своей сессии внутри приложения (так как сессия пользователя - это, строго говоря, вообще отдельная сущность, но в рамках примера она опущена для простоты), и, аналогично, в разрушении своей сессии. Иными словами - пользователь здесь это скорее сущность, которая абстрагирована от создания/разрушения собственного сеанса внутри приложения. и оперирующая пользовательскими полями.
Собственно, создание или разрушение сеанса может происходить и более сложным способом (через авторизацию по OpenID, иного провайдера и т.п.) - и потому я счел более корректным отделение этого функционала (пусть и, бесспорно, связанного с пользователем) от сущности пользователя. Ну а так как - я уже упомянул - я упрощения ради опустил сущность "пользовательская сессия" - наиболее просто было вынести два этих метода в базовый контроллер.
3. Bio man - 07 Июня, 2012 - 23:19:19 - перейти к сообщению
Спасибо, суть вроде понял. И сразу появился вопрос.
Раз сессия это сущность, которая может принять множество обликов (как Вы упамянули OpenID, стд сессии итд) то логично создать сущность сессии.
Еще есть сущность пользователя, которая выполняет вход/выход итд, и которая агрегирует сущность сессии (точнее композирует, если можно так сказать) и работает с этой сущностью.
А контроллер User или любой другой уже будет работать с сущностью пользователя.

Правильно будет если я реализую такую логику?
4. EuGen - 07 Июня, 2012 - 23:21:46 - перейти к сообщению
Bio man
Не путайте модель и контроллер. Контроллер отражает логику приложения по работе с моделью.
По поводу сессии пользователя - да, сущность "пользовательская сессия", по-хорошему, должна быть создана и должным образом оформлена, иметь требуемые методы (в том числе, если это нужно - авторизацию посредством запрашиваемого провайдера). Посмотрите Zend - там, если не ошибаюсь, работа примерно в таком исполнении ведется.
5. Bio man - 07 Июня, 2012 - 23:51:53 - перейти к сообщению
EuGen пишет:
Не путайте модель и контроллер.
Так я не путаю вроде.
Я о том, что есть модель User, которая работает с моделью Sessions и БД. А с этой моделью можно работать в любом контроллере.
Так будет корректно?

Может я сильно увлекся в этой теме, не совсем ведь по теме... Может перенести в отдельную?
6. caballero - 08 Июня, 2012 - 01:25:05 - перейти к сообщению
Хммм... Сами хоть поняли чего понаписали?
7. Bio man - 08 Июня, 2012 - 02:58:17 - перейти к сообщению
caballero
да Улыбка а как по вашему надо?
8. sKaa - 08 Июня, 2012 - 04:31:29 - перейти к сообщению
Bio man, ну имхо класс для работы с сессиями и базой это не модели а часть функционала приложения, ядро приложения скорей или его часть, а модель User взаимодействует с ними.
9. Bio man - 08 Июня, 2012 - 06:04:41 - перейти к сообщению
sKaa как по мне так модели. только юзер посредник, который берет данные с БД и сессии...
10. caballero - 08 Июня, 2012 - 07:37:53 - перейти к сообщению
Bio man пишет:
да а как по вашему надо?

надо что?
правильно сформулированный вопрос уже половина ответа.
В данном случае чтобы получить ответ нужно грамотно сформулировать задачу.

Bio man пишет:
как по мне так модели.

с этого и начни - сформулируй шо сие такое модель. Чтобы это не было чем то расплывчатым по которому непонятно что к нему относится.
11. Bio man - 08 Июня, 2012 - 09:11:05 - перейти к сообщению
В общем, следует прочитать вот от сюда, что бы понять с чего началось...
Правильно ли сущность пользователя вынести отдельно как модель и в нем реализовать методы login и logout, вместо того, что бы в базовом контроллере делать эти методы, как в примере.

Модель в моем понимании это красивая девушка и еще это класс (если говорить в ед. числе), который отвечает за ввод/вывод данных, например, в БД. Есть тонкие модели, что является просто массивом данных.
12. caballero - 08 Июня, 2012 - 10:44:17 - перейти к сообщению
Цитата:
Правильно ли сущность пользователя вынести отдельно как модель и в нем реализовать методы login и logout, вместо того, что бы в базовом контроллере делать эти методы, как в примере.

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

Цитата:
Модель в моем понимании это красивая девушка и еще это класс (если говорить в ед. числе), который отвечает за ввод/вывод данных, например, в БД. Есть тонкие модели, что является просто массивом данных.

а еще под моделью можно понимать всю структуру данных проекта лежащую в БД. Как по мне было бы проще не употреблять термина модель вообще.
13. Bio man - 08 Июня, 2012 - 12:17:29 - перейти к сообщению
caballero пишет:
что такое в данном контексте базовый контроллер.
Тот что в примере Евгения. Посмотри самый первый пост на самой первой странице
14. sKaa - 08 Июня, 2012 - 13:50:41 - перейти к сообщению
Смотреть лень, я так понимаю что это классическое :
PHP:
скопировать код в буфер обмена
  1.  
  2. abstract class Controller_Base {
  3.  
  4.   abstract public function Index();
  5.  
  6. }
  7.  

Который нужен чтобы не сильно захламлять сами контроллеры, ну и частично описать интерфейс избегая implements можно тоже ))) :
PHP:
скопировать код в буфер обмена
  1.  
  2. class Controller_Index extends Controller_Base {
  3.  
  4.    public function Index(){
  5.  
  6.    }
  7.  
  8. }
  9.  

(Добавление)
Bio man, походу ты слишком много гоняешь по теме, что и как лучше... Я так думаю, что если ты и сунешь какие-то операции с моделями ($User->LogIn(), $User->LogOut) внутрь контроллеров, то мало чего поменяется, разве, что в перспективе масштабирования приложения от таких приколов будет не очень гибким, но раз уж у тебя это дипломная работа или курсовик думаю и так сойдет...
Можно еще туда инициализацию сессий засунуть, какую нибудь страничку типа 404 итд..
15. Bio man - 08 Июня, 2012 - 15:23:53 - перейти к сообщению
sKaa пишет:
походу ты слишком много гоняешь по теме, что и как лучше
то что мне кажется логичным для профессионалов является неправильным, и так всегда. С начала я хотел узнать зачем те 2 метода в родительском контроллере, от которого наследуются все контроллеры, затем захотел узнать как лучше и куда вынести эти методы, но некоторые придираются к техническим понятиям, таким как "модель", и толком ничего не советуют.

Потому я сделаю так: создам класс UserSession, класс User (модели) и в классах контроллерах буду проверять права, зашел ли юзер и работать с остальными данными User'а.
А в контроллере User создам 3 метода - login, logout и register.

Если есть аргументы почему так не делать то пишите, буду рад. Если же нету то и писать не стоит.

 

Powered by ExBB FM 1.0 RC1