|
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 52
|
||||||
MVC - правильное использование наследования29.08.2013, 20:11. Показов 5748. Ответов 59
Метки нет (Все метки)
Всім добрий день. Я намагаюсь розібратись з MVC і написати свій "велосипад"(фреймворк) - чисто для досвіду і щоб зрозуміти як це все працює. Знайшов в інтернеті статтю с файлами по цій темі(файли прикріпив).
Насколько я понял, из этой статьи, все контроллеры наследуются от базового контроллера. Здесь и вопрос - что именно они должны наследовать. В файлах которые я прикрепил находится такой код:
Документацию по ним читал, но не совсем понимаю что они делают именно в этом примере.
0
|
||||||
| 29.08.2013, 20:11 | |
|
Ответы с готовыми решениями:
59
Сеттеры в PHP. Правильное использование Правильное использование пространства имен |
|
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
|
|||||||
| 02.09.2013, 15:21 | |||||||
|
Так опишите, еще не поздно. Пока я за полками бегаю.
Только не так пожалуйста
Добавлено через 3 минуты
0
|
|||||||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||
| 02.09.2013, 15:23 | |||
|
Добавлено через 1 минуту
0
|
|||
|
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
|
|||
| 02.09.2013, 15:30 | |||
0
|
|||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||||
| 02.09.2013, 15:36 | ||||
|
В общем, вы тут поделитесь своим опытом с нубом (мной, конечно же), а я потом приду
0
|
||||
|
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
|
|||||||||
| 02.09.2013, 15:46 | |||||||||
Ну а серьёзно, зачем так то. Не я начал, это вы обьявили:
0
|
|||||||||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||
| 02.09.2013, 15:51 | ||
|
0
|
||
|
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
|
||||||||||||
| 02.09.2013, 15:52 | ||||||||||||
0
|
||||||||||||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|
| 02.09.2013, 15:52 | |
|
0
|
|
|
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
|
||
| 02.09.2013, 15:55 | ||
0
|
||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||||||||
| 02.09.2013, 16:06 | ||||||||
Добавлено через 2 минуты в общем, не вижу смысла что-то еще тут обсуждать. Надеюсь, код от таких экспертов, также, как и мой код к ним, никогда не попадут.
0
|
||||||||
|
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
|
|||||||||||||||||||||
| 02.09.2013, 16:31 | |||||||||||||||||||||
|
И что? Причем тут реализация __call()? Мы не обращаемся к свойствм напрямую, что предлагаете вы. А именно это ключевой момент. Я же говорил, что гораздо логичнее и прозрачнее использовать специальные сеттеры, не магические. Что мы и наблюдаем. Устанавливаем свойства мы не так:
Вызывая метод, мы явно и недвузначно понимаем, что производим конкретное действие. Устанавливаем свойство. Как реализовано это в классе, не важно, можно написть 30 сеттеров, можно так, как в статье, с помощью __call(), важно то, что мы не нарушаем принципов ООП. Мы попрежнему не можем обратиться к private свойству напрямую. Только через специальный для него сеттер. Ровно тоже самое с геттерами. Мы не можем получить значение свойства извне напрямую. Только через именной геттер. Это прозрачно, функционально и красиво. Но причем тут мгические сеттеры/геттеры, в пятый раз спрашиваю?
0
|
|||||||||||||||||||||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||
| 02.09.2013, 16:35 | ||
|
0
|
||
|
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
|
|||||||||||||||||||||||
| 02.09.2013, 17:03 | |||||||||||||||||||||||
|
Да хватит сливаться уже. Не интересно, ни кто не держит.
А вот это:
Причем мы не можем получить значение свойства так:
А вот геттером пожалуйста, если оно есть, это вполне оправдано и прозрачно:
И это, я терпеливый. Я долго могу разговаривать со стенкой. Пока у неё аргументы не кончатся и она окончательно не сольется. Ну или не докажет мне обратное. ![]() Добавлено через 8 минут
Пока навскидку больше не могу придумать им оправдния. Буду признателен, если покажите действительно достойное им применение. Я же тоже могу заблуждаться, не спорю. Однако представленных примеров и аргментов явно недостаточно ввиду их несостоятельности.
0
|
|||||||||||||||||||||||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||||||||||||||||
| 02.09.2013, 17:33 | |||||||||||||||||
|
Только лично я вместо кучи сеттеров setArg1, setArg2, setArg3, setArgN, если это не запутает код - напишу один метод __call() вместо кучи этих самых сеттеров а-ля "другой язык". Не хотите давать доступ ко всем свойствам - задайте список возможных свойств для доступа. Я уже понял (и о ужас, и про это я уже говорил), что вы предпочтете код вида
Вы начинаете писать код, видите кучу "getName$i", понимаете, что это просто тихий ужас. Тогда вы начинаете придумывать якобы единственную необходимость в геттерах и сеттерах, а затем вообще бредовую идею о том, что закрытые/защищенные свойства закрыты должны быть на все виды доступа - и на изменение значения, и на считывание. Это просто убивает половину ООП. Добавлено через 1 минуту
0
|
|||||||||||||||||
|
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
|
|||||||||||
| 02.09.2013, 18:35 | |||||||||||
|
Снизу вверх. Костыль, не сам сеттер, а ваше его применение. Вот перегрузка свойств с помощью именнованных сеттеров, это хороший паттерн. Но он не использует магического сеттера. А уж геттера подавно.
Вот это главное, принципиальное различие между пользовательскими сеттерами и магическими. Пользовательские не нарушают принципов инкапсуляции.
Можно конечно попытаться оградить доступ к другим свойствам так:
Что касается вашего примера с кучей свойств, ну сами же мне показывали статью с перегрузкой методов. Зачем каждый писать отдельно. Неужели не вникли до сих пор? Вы почему не хотите признать очевидного, эта статья не про магические сеттеры. Она про упрощение использования именновнных. Вот за это я проголосую обеими руками. А магический сеттер от лукавого. Он только путает все, о чем я и предупредил в самом начале. (ну и геттер не лучше) ![]() Добавлено через 5 минут Что касаемо проверки в самом сеттере, я же говорил - можно навтыкать туда свичей. Ну или массивов как у вас. Но это уже попахивает. А если свойств стопицот? Или понадобится то, которое вы не учли в массиве? Добавлено через 5 минут
0
|
|||||||||||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||||||||||||||||
| 02.09.2013, 19:29 | |||||||||||||||||
![]() И да, если у вас "стопицот" свойств/методов, то это уже явно неверная структура и код просто кричит о необходимости реорганизации. Добавлено через 2 минуты Не по теме: активнее, активнее, а то скучно :bravo: Добавлено через 2 минуты
0
|
|||||||||||||||||
|
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
|
||||||||||||||||||||||||
| 02.09.2013, 20:40 | ||||||||||||||||||||||||
|
Вот это:
Обращаетесь вы к нему снаружи класса. Или нет? Оно у вас в классе имеет уровень доступа protected. Или я что-то напутал? Обращение к защищенному свойству нарушает принципы инкапсуляции. Или их пересмотрели? Теперь вторая сторона. Вот это метод:
У него уровень доступа public. Я сходил проверил. Реализация метода находится в классе. Или придумали как то иначе? Внутри класса метод имеет право обращаться к свойствам с любым доступом. Не? Я использую только то, что разрешено. Не нарушая никаких принципов. Если свойство нужно снаружи, ставим публичный доступ. Не нужно мудрить. Если нужен доступ к приватному свойству, я использую возможности класса. Позволяет он доступ, не вопрос. Пользуемся. Но это решает класс. Это принцип инкапсуляции. Где противорече?
Где противоречие?
А у меня в таких случаях просто есть универсальный сеттер, который не портит общей картины и не нарушает принципов ООП.
![]() Добавлено через 18 минут -
0
|
||||||||||||||||||||||||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||||||||
| 02.09.2013, 21:08 | |||||||||
![]() ![]()
0
|
|||||||||
|
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
|
|||||
| 02.09.2013, 21:29 | |||||
0
|
|||||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||||||||||||||||||
| 02.09.2013, 21:47 | ||||||||||||||||||
Хотите - вытаскивайте, мне как-то все равно. Кстати, хотите прикол? Видели заголовок?)![]() Итак, по порядку. Вот даже еще раз код
Итак, что мы имеем: 1. Свойство закрытое? Да. 2. Метод публичный? Да. 3. Публичный метод обращается к закрытому методу? Да. 4. Противоречит это принципам инкапсуляции? Нет. Все точь-в-точь по вашей же фразе.
0
|
||||||||||||||||||
| 02.09.2013, 21:47 | |
|
Правильное использование include (PHP) Правильное использование своих библиотек в модели Правильное построение паттерна "MVC"
использование наследования Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|