Я долго пытался обернуть голову вокруг ООП. Я вижу его преимущества. Я прочитал много, много уроков и посмотрел одинаковое количество видео по этой теме. Я получаю примеры животных / кошек / собак, я получаю примеры автомобилей / приводов. Я борюсь с тем, как применить эти концепции в реальных приложениях. Итак, я решил построить один с использованием ООП.
Я не прошу помощи по синтаксису или написанию конкретного кода - я могу найти это сам в документации, а также в поиске на форумах и т. Д. Что мне действительно нужно, так это какое-то руководство и толчок в правильном направлении время от времени. Есть ли опытные программисты, готовые наставлять меня?
В качестве учебного проекта я хотел бы создать простое объявление "веб-приложение". Нечто похожее на Craigslist, но с точки зрения масштабов. Я хотел бы использовать PHP5 и MySQL, потому что я знаком с ними.
Допустим, есть только эти 2 варианта использования:
- Размещать что-то для продажи
- Просмотр / поиск чего-нибудь купить
Какие "вещи" должны быть объектами? Я могу представить, что каждый предмет может быть объектом, но в какой момент? И почему?
Так, например, пользователь заполняет форму «отправить товар на продажу», должна ли эта форма превратиться в объект, который передается другому объекту, который вставляет значения в базу данных?
Что делать, когда другой пользователь просматривает и запрашивает просмотр всех элементов категории C? Имеет ли смысл, что когда приложение должно подключиться к своей базе данных, оно создает объект базы данных, а затем получает кучу объектов элементов и отображает их на странице? … Выписывание этого, безусловно, заставляет меня осознать, насколько я все еще не понимаю ООП. Пожалуйста, помогите мне исправить это.
Если, по вашему мнению, это не очень хороший проект, чтобы начать знакомство с ООП, пожалуйста, не стесняйтесь предложить другую идею!
источник
Ответы:
Честно говоря, я считаю, что этот совет до сих пор был ужасным для начинающих учеников. Не стоит сразу же начинать думать об объектах как о представлении определенного экземпляра «вещи», определенной некоторым классом. Лучше думать о них как об отдельных компонентах машины, которые имеют некоторое взаимодействие друг с другом, но не с внутренними компонентами друг друга. Каждый из этих компонентов поддерживает состояние
Если вы хотите использовать ORM (объектно-реляционное отображение) для взаимодействий с БД, то какая бы среда вы ни использовали или создавали, она, вероятно, будет иметь некоторые поверхностные объекты, представляющие таблицы, которые, вероятно, представляют собой наборы «вещей», но лично мне не нравятся ORM. и я не думаю, что они обязательно представляют идеальные методы ОО, но они популярны для больших веб-приложений.
Кроме того, у вас, вероятно, будут некоторые важные компоненты, которые должен запускать компьютер веб-приложения, такие как одно или несколько подключений к БД (вы можете создать класс, поддерживающий соединение, и вы можете запускать подготовленные запросы из него -
PDO
отлично подходит сам по себе , но я бы обернул это) и, возможно, система шаблонов для ваших взглядов. Вы можете также захотеть, чтобы ваши контроллеры были объектами PHP. Если у вас есть форма для заполнения, у вас может быть объект, который поддерживает значения формы для P / R / G, токен CSRF-защиты и может выполнять проверку его входных данных.Вы не должны пытаться искать «вещи», которые можно превратить в объекты при создании дизайна веб-приложения и графа объектов. Вместо этого вы должны подумать о логических компонентах, которые собираются вместе, чтобы создать его. Я не думаю, что вы должны пытаться форсировать это, и это должно произойти довольно естественно, но это очень трудно сделать правильно, и вам обязательно придётся изменить некоторые дизайнерские решения по пути.
Мой последний совет: составление наследства - это путь.
источник
Вот как вы можете использовать ООП для покупки и продажи своих питомцев, та же методика может быть использована для продажи автомобилей или самолетов; p
источник
По запросу ОП я поделюсь кодом моей гостевой книги.
Класс сообщения:
Класс объекта доступа к данным сообщения:
index.php
Я переименовал некоторые переменные и функцию, чтобы они имели для вас смысл (в переводе с голландского на английский: P), чтобы вы могли иногда находить некоторые странные движения, потому что я только что сделал быструю замену и т.д. Кроме того, это не весь код, потому что это приведет к тому, что я отправлю примерно 20 файлов кода: P
источник
Как уже упоминалось в Explosion Pills, в сложном приложении большинство объектов относятся к компонентам приложения (например, к пулам соединений с базами данных, командам, структурам данных, таким как хэш-карты), а не к объектам реального мира (таким как посадочный талон, счет-фактура или файл mp3. ). Есть много хороших книг по шаблонам проектирования, которые показывают вам, как люди решили много повторяющихся проблем в этой области. Книга GOF, как известно, тщательна, но очень суха, шаблоны проектирования Head First могут быть более доступными.
С точки зрения анализа реального мира и дизайна. Часто полезно думать с точки зрения существительных и глаголов. Например, библиотека видеопроката (сейчас они устарели?) Может иметь следующие вещи / существительные:
С точки зрения глаголов:
Затем их можно превратить в классы с операциями (я давно не делал PHP, поэтому буду избегать этого):
Все это требует много практики и игры. Лучшее, что можно сделать, это застрять и извлечь уроки из неудачных проектов. По моему мнению, OO - это то, что вы можете продолжать изучать и развивать в течение своей жизни (это нелегко и нет идеальных решений для чего-либо). Хороший дизайн часто повторяется, поэтому попробуйте несколько разных идей для своего веб-приложения «Список Крейга».
источник
Лучше всего найти способ сосредоточиться на ядре вашего приложения - «post», «user», «post :: FindByName ()», «user-> Validate ()» и т. Д., И не беспокоиться слишком много о сантехнике - как склеивать посты с таблицами базы данных, как поддерживать отображение поста согласованным между разными поисками и как склеивать форму «вводить пост» с записью базы данных.
К счастью, есть много платформ, которые делают это для вас; доминирующей парадигмой в веб-приложениях OO является «Model-View-Controller», также известный как MVC ; в PHP есть несколько готовых MVC-фреймворков, которые вы можете использовать.
Хотя это расширяет ваши потребности в обучении - теперь вы должны изучать как MVC, так и OO - это означает, что ваши усилия в области OO в основном ограничены уровнем «Model», который представляет вашу бизнес-область; вот где ОО является наиболее естественным и выразительным. Большинство инфраструктур MVC позволяют вам определять свой «модельный» слой, а затем автоматически создавать веб-сайт вокруг него, используя технику, известную как скаффолдинг - таким образом, вы получаете быстрый способ экспериментировать с различными реализациями для вашей доменной модели, без приходится отрывать всю сантехнику.
источник