|
0 / 0 / 0
Регистрация: 11.08.2021
Сообщений: 17
|
|
Мини-аналитика сайта ООП php11.08.2021, 22:50. Показов 3427. Ответов 16
Добрый день, осваиваю ООП php и любую новую задачу пытаюсь решить с его помощью.
Ранее использовала только функциональное программирования. Поэтому у меня есть сайт, личный кабинет которого написан на php, но основан на функциях. Работает и хорошо, но всё-таки хочется уже более профессионального уровня. Задача в том, что в этом личном кабинете нужно вывести количество уникальных посетителей и визитов из базы данных по определенным параметрам (текущий день, неделя, месяц). У меня была идея создать два класса, соответственно Посетители и Визиты. Эти два класса будут наследоваться от абстрактного класса Метрики и будут реализовывать метод получения количества. Далее создать еще один класс Аналитика, который по-идее должен оперировать классами Посетители и Визиты. Потом я думала, как решать вопрос с периодами с учётом добавления новых в будущем. Тут классы ТекущийДень, ТекущаяНеделя и ТекущийМесяц. Все три класса реализуют метод, возвращающий период. И класс Период, в котором создаются экземпляры классов периодов и записываются в свойство класса (массив). Понимаю, что не вижу дальнейшего решения, возможно моя абстракция в корне не верна. Дальше реализация только разрастается и становится уже нерасширяемая. С функциями решала бы проще. Создала две функции, одна для формирования периодов. А вторая для запросов к базе и соответственно возврата значения. Но это решение опять же невозможно быстро расширить. Допустим нужно будет выводить количество посетителей за вчерашний день, прошлую неделю. Может даже добавится ещё одна метрика, например, количество покупок. Или потребуется не количество, а сумма покупок. Подскажите, пожалуйста, как бы вы решали такую задачу именно на ООП? Как вообще оценивать задачи с точки зрения решения на ООП? Т.е. я сейчас изучаю основы, решаю задачи по ООП на подобие создать фабрику мебели. Здесь понятно, как решать, а когда неконкретная, а прикладная задача уже сложно.
0
|
|
| 11.08.2021, 22:50 | |
|
Ответы с готовыми решениями:
16
Срипт PHP Мини-чата для сайта Аналитика сайта Где найти программы под Linux для создания сайта, мини сайта ? |
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
|
| 12.08.2021, 06:41 | |
|
Я считаю, что для вашей задачи использование такого уровня абстракции избыточно. Всю функциональность счётчиков можно заключить в один класс "Счётчики".
0
|
|
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
||
| 13.08.2021, 00:29 | ||
|
Поддерживаю, все это избыточно. Профессионализм заключается не в том чтобы использовать ООП, а в том чтобы использовать подходящие методы для решения задачи. А вы пытаетесь использовать ООП ради ООП и конечно пазл не сходится. ООП вообще спорная штука и уж точно не панацея.
Более того, стоит помнить что каждый объект это дополнительные накладные расходы.
0
|
||
|
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,813
|
|
| 14.08.2021, 01:10 | |
|
web-junior, В задачах изучают самые базовые механизмы ООП в виде полиморфизма, наследования и т.д. К сожалению зачастую их ставят не лучшим образом, впихивают их ради чтоб впихнуть, в тоже время могут нарушаться другие принципы, о которых начинающий программист еще не знает. Это вредит выработке правильного мышления в ООП парадигме.
Я заметил общую проблему новичков, которые изучая ООП кроме наследования ничего знают и воспринимают ООП как гребаный кроссворд. Знаете как в школе нам давали домашнее задания составить кроссворд - чем больше пересечений, тем лучше - выше оценка. Они начинают тратить уйму времени, придумывая невероятные хитросплетения, чтоб сократить код - потом конечно же гордятся своими результатами) Проблема заключается в том, что они зафиксировали систему в текущем состоянии, так сказать "сфотографировали" и завязали мертвым узлом. Тут стоит задуматься - а действительно ли отсутствие кода это хорошо? Что именно является хорошим кодом? Чтоб ответить на этот вопрос - вы должны представить такую ситуацию, что в ваш проект приходит абсолютно левый программист, который совсем не знаком с вашим проектом и не знает предметной области. На сколько быстро он разберется в вашем коде и сможет безопасно внести изменения? Одна из проблем заключается в том, что многие программисты боятся вносить изменения, что могут что-то поломать и в таких ситуациях начинают костылять. Не нужно думать, что задача якобы заранее известна, а вы лишь пишете ее реализацию. Когда вы пишете код - вы как-бы рассказываете повествование для других будущих (в том числе и себя) программистов - он должен быть максимально очевидным, и не вызывать сомнений, что если здесь что-то изменить, то может что-то поломаться. Вы должны именно отразить то, как этот код работает на данный момент. Не стоит задумываться и делать заготовки на будущее - вы никогда не угадаете) Поверьте моему опыту - когда приходит время, все оказывается совсем не так, как вы могли себе предположить) И такой поток левых программистов может быть достаточно большой - и вы устанете объяснять все ваши хитросплетения, что если ты хочешь сделать какую-то вещь, то нужно почесать правое ухо левой пяткой. В реальных проектах ООП в первую очередь используется для построения архитектуры приложения. Код можно написать как угодно, и это будет работать. Проблемы начинаются, когда его нужно изменить - мы сталкиваемся с множествами проблемами: 1) Монолит, сильно связанный код. Чтоб сделать простейшее изменение - необходимо буквально изучить всю систему, которая настолько огромна, что не помещается в вашу голову. 2) Запутанный, хитросплетенный код. При малейшем изменении есть риск повредить уже работающие части нашей системы. Мы получаем бесконечные баги. 3) Низкоуровневый, сложночитаемый код, стоимость поддержки. Скорость печатания не влияет на скорость разработки, ведь большую часть времени программист читает окружающий код, даже тот, который он только что написал. Имеется в виду не то, что его в принципе трудно прочитать - а то, что при его чтении необходимо его каждый раз разбирать, держать в голове много лишней информации, тратя на это время и умственные ресурсы. В идеале должно быть достаточно одного взгляда, чтоб понять, что этот код делает, и то, что он 100% работает, т.е. он настолько очевидный, что не дает повода засомневаться в его работоспособности. Это далеко не весь список проблем. Мы не нострадамусы, и нам трудно предположить, каким образом будет меняться программа, и с какими проблемами мы столкнемся. Большинство проблем далеко не очевидны и кроются как мины замедленного действия, которые в один момент могут привести к краху. По сути ни один человек не сделал ни одного открытия с нуля. Все величайшие открытия базировались на многолетней работе и опыте тысячи людей. Невозможно просто так внезапно придумать телевизор или фотоаппарат - прошли тысячелетия от изучения простейших моделей анимационных и оптических эффектов/свойств. Так же и в программировании, многолетняя практика тысячи программистов набивания шишек, попытки решить те или иные проблемы и обмен опытом родили некие принципы, следуя которым вы избежите большинство проблем. Такие как SOLID, GRASP, DRY, YAGNI, DDD... и еще куча букв. Каждая буква это не просто аббревиатура - это целая философия, про каждую из них есть целые книги). Все они сводятся так или иначе к деньгам, их так просто бы не придумали. Нужно в них верить и тогда сможете в итоге познать их целесообразность. На данный момент я устал все это писать, позже распишу подробнее, в чем заключается ошибка ваших суждений.
2
|
|
|
100 / 70 / 26
Регистрация: 19.12.2014
Сообщений: 332
|
|
| 16.08.2021, 14:23 | |
|
Да, набор предлагаемых классов очень раздутый. Обычно на сайте всегда есть такая сущеность как "пользователь". Если её нет, то в качестве рефакторинга я бы предложил реализовать. К этому классу можно добавить статический метод получения количества посетителей, вот и всё.
Осмелюсь порекомендовать изучение шаблонов программирования, например тут. Только не делайте ошибку, которую допускают многие: не нужно старательно искать где применить эти патерны и не нужно их применять шаблонно. Это не руководство к действию, а сборник удачных решений часто возникающих задач. В "чистом виде" эти решения не должны применяться, лучше просто помнить об их существовании и когда возникнет схожая задача вы будете знать куда копать.
1
|
|
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
|
| 16.08.2021, 16:18 | |
|
1
|
|
|
0 / 0 / 0
Регистрация: 11.08.2021
Сообщений: 17
|
|
| 17.08.2021, 09:01 [ТС] | |
|
Добрый день. Спасибо за ответы. Да, реализация действительно избыточна. Попробовала создать один класс и в нём несколько методов, в т.ч. и статических. Однако столкнулась с ajax-запросом и не поняла, как его использовать в моём случае. В итоге, опять решила задачу с помощью функций. Конечно, такой код никому не покажешь(
0
|
|
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
||
| 17.08.2021, 09:42 | ||
|
Правильно, никак. В чём ваша ошибка, сказать невозможно, не увидев код.
0
|
||
|
0 / 0 / 0
Регистрация: 11.08.2021
Сообщений: 17
|
|||||||
| 17.08.2021, 10:37 [ТС] | |||||||
Потом подключаю файл viewReport.php и распределяю данные из полученного массива по верстке. Но пользователю должна быть предоставлена возможность строить график, переключая периоды: текущий месяц, прошлый месяц (в процессе реализации добавился ещё и год). Т.е. при нажатии на определенную кнопку я должна вызывать метод getVisits с параметром (тут я не реализовывала, поскольку не поняла, как дальше), а точнее отправить ajax запрос. Вот здесь я окончательно запуталась, если отправлю на index.php, то у меня получается пересоздастся экземпляр класса...
0
|
|||||||
|
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
|
||
| 17.08.2021, 11:54 | ||
Сообщение было отмечено web-junior как решение
Решение
1) Уберите статику, тут ей не место.
2) Свойство $connection сделайте приватным.3) Вот этим times в данном классе не место. Он должен отвечать только за возвращение кол-ва визитов/посещений/товаров и т.п. за указанный ему извне период.Представьте, что этот класс -- бухгалтерия огромной фирмы. Теперь подумайте, должна ли бухгалтерия сама определять даты, за которые она хочет выдавать те или иные выписки? К тому же, если грамотно вынести массив times в другое место, его можно будет повторно использовать в шаблоне, где пользователю должна быть предоставлена возможность строить график, переключая периоды.AJAX-запрос спровоцирует запуск нового процесса, который тоже уже будет мёртв, когда в браузер вернутся от него данные. Почитайте вот это: http://phpfaq.ru/newbie/na_tanke
1
|
||
|
0 / 0 / 0
Регистрация: 11.08.2021
Сообщений: 17
|
|
| 17.08.2021, 14:02 [ТС] | |
|
Спасибо. Обязательно попробую так сделать. Сейчас уже понятнее стало)
0
|
|
|
100 / 70 / 26
Регистрация: 19.12.2014
Сообщений: 332
|
||
| 17.08.2021, 14:33 | ||
|
0
|
||
|
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
|
|
| 17.08.2021, 16:33 | |
|
cia, так контекст как раз таки изучение ООП, а по простому она и на функциях напишет)
И непонятно в чем тут упрощение. В том что отдельный файл не создали? Ну такое)
0
|
|
|
193 / 140 / 36
Регистрация: 19.11.2020
Сообщений: 881
|
|||
| 22.08.2021, 20:48 | |||
![]() Добавлено через 1 минуту У каждого свои тараканы)))
0
|
|||
|
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,813
|
||
| 23.08.2021, 17:07 | ||
|
0
|
||
|
193 / 140 / 36
Регистрация: 19.11.2020
Сообщений: 881
|
||
| 23.08.2021, 17:11 | ||
|
0
|
||
|
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,813
|
|
| 23.08.2021, 18:07 | |
|
0
|
|
| 23.08.2021, 18:07 | |
|
Помогаю со студенческими работами здесь
17
Где лучше учить ООП PHP ? И зачем нужен ООП Оптимизация мини-сайта Средствами PHP и с использованием ООП php создать реализацию следующего интерфейса: Мини блог PHP + MySQL В мобильной версии сайта не открывается мини-корзина Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Рецензия / Мнение/ Перевод
Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period.
Это. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|