|
2 / 2 / 0
Регистрация: 20.12.2012
Сообщений: 52
|
||||||
MVC - правильное использование наследования29.08.2013, 20:11. Показов 5783. Ответов 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"
использование наследования Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|