Как реализовать стиль MVC для моего кода PHP / SQL / HTML / CSS?

Я разрабатываю программу для визуализации некоторых данных. Моя программа принимает конкретные данные из базы данных MySQL и рисует некоторые графики (библиотека libchart), создает некоторые таблицы и т. Д.

Моя проблема в том, что прямо сейчас его код ад там. У меня около 7 php-файлов (индекс, графическая страница, галерея и т. Д.) Вместе с HTML / CSS и PHP / SQL-кодом (некоторые из них просто имеют расширение php, но имеют только HTML внутри). У меня нет проблем читать и понимать проект на данный момент, но я думаю, если кто-то еще попытался, он мог бы получить головную боль. Кроме того, продолжение программирования, как это, нецелесообразно, поскольку в будущем проект может быть легко масштабируемым.

Есть ли у вас какие-либо предложения о том, как успешно отделить HTML / CSS от PHP / SQL? Я не хочу использовать фреймворк, так как я не делаю ничего, что требует ввода пользователя, обработки сеанса и т. Д. Я просто запускаю несколько запросов и визуализую результаты. Я в основном говорю об архитектуре здесь, и, если применимо, возможно, скрипт, который поможет мне (я читал о Smarty, но я не уверен, что это то, что мне нужно).

Есть ли у вас какие-либо предложения о том, как успешно отделить HTML / CSS от PHP / SQL?

Поздравляем вас за то, как вы можете улучшить код. Это предварительное условие, вам нужно улучшить его, и тема длительная. Поэтому ваша воля имеет решающее значение.

Я начинаю легко, а затем пытаюсь дать несколько советов. Поскольку вам не хватает опыта, найдите одно очко для начала, и, самое главное, последнее из приведенного ниже списка. Но сначала первое:

Чтобы отделить что-то друг от друга, вам нужно иметь некоторый код, который разделяет:

[HTML/CSS/PHP/SQL] [HTML/CSS] <--> [SEPARATOR] <--> [PHP/SQL] 

Сепаратор на самом деле тоже PHP-код, но я думаю, что вы поняли эту идею.

Как вы можете видеть, только Separator ведет переговоры с HTML / CSS и PHP / SQL .

Таким образом, для того, чтобы эта работа работала, как HTML / CSS, так и PHP / SQL необходимо иметь интерфейс с Separator (линия между ними).

Обычно в программе вы передаете данные, которые обрабатываются get. Данные довольно динамичны и могут иметь сложную сложность, особенно если вы передаете данные в процедуру вывода, которая должна правильно отформатировать ее.

Существует несколько способов использования такого разделителя (или нескольких из них). Вы можете сложить свое программное обеспечение или предоставить компоненты, которые выполняют действия в своей области или области . Например, у вас есть уровень базы данных или компонент базы данных, который заботится о взаимодействии с базой данных.

Или у вас есть механизм шаблонов, который позаботится о том, чтобы ваши строки и массивы были добавлены в некоторый читаемый HTML.

Короче говоря, это макаронная теория проектирования программного обеспечения:

  • Код спагетти – все в одном, код сильно переплетается, предпочтительнее с Болоньезом или Аглио, Олио и Пеперончино.
  • Ласканный код – Слоистый, на одном слое есть два других слоя, с которыми он взаимодействует (если только нижний или верхний), всегда с соусом Бешамель.
  • Код Тортелини. Небольшие компоненты, которые просто выполняют свою работу, у них есть Мясо или Пряные Овощи внутри.

Подобно тому, как мы едим разные макароны в нашей жизни, при программировании нам также нужно иметь дело со всеми этими разными типами кода, и с течением времени мы разрабатываем свой собственный предпочтительный вкус. В детстве мы кормим, но со временем мы начинаем готовить что-то свое и варьировать рецепты.

Поэтому я считаю, что вам просто не хочется сейчас есть MVC Framework X с огромными впечатлениями в течение следующих недель только потому, что кто-то сказал вам, что это способ съесть сейчас. А перед едой есть дегустация, верно? Не говоря уже о фаст-фудах, вы знаете, как эти лапши с соусом в упаковке – только добавляйте воду. Urgh.

Я не знаю, какие данные вам нужны, и что такое вход. Ниже приведены некоторые грубые советы по рефакторингу для приложений, которые выводят HTML / CSS и взаимодействуют с базой данных MySQL. Это не может быть полный список, и описания могут лишь грубо очертить некоторые мысли:

  • Переместите CSS из HTML . Эффективно используйте селектор в связанном определении CSS и заменяйте любые атрибуты style если у вас все еще есть некоторые. Это делает ваш код CSS повторно используемым и более модульным. Это поможет вам найти недостатки внутри вашего HTML и отделить структуру (HTML) от презентации (CSS). Эффективные HTML начинаются с эффективного использования CSS, эти два очень мощные вместе, и часто это уже облегчит ваши программные процедуры вывода.
  • Извлеките бизнес-логику из HTML . Как HTML, так и ваш код могут быть зверями, поэтому лучше их разделить. У них есть тенденция сражаться друг с другом, и поскольку оба они очень сильны, борьба будет продолжаться, пока вы разрабатываете свое приложение, что отвлекает вас от работы, которую вам нужно делать.
    Подумайте, нужно ли вам уже иметь сложный вывод внутри вашего приложения или если вы можете просто передать массивы с подэлементами (ключ – это var, var может содержать строку или число или другой var-массив). Обычно это необходимо для передачи даже сложных данных в представление или шаблон . Вам HTML тогда нужно только эхо некоторых членов массива и / или foreach над subarrays. Это очень простой способ создания шаблона. Вы можете использовать PHP для этого, так что вы действительно очень гибкие (просто нарисуйте границу, код которой принадлежит вашему слою представления и который является частью приложения, например, предоставляя значения для представления).
  • Извлеките SQL из своего кода . Переместите код взаимодействия с базой данных. Создайте себе один или несколько объектов, которые имеют методы, которые возвращают данные так, как вам нужно (потребляют) их в вашем фактическом коде обработки, например $component->getThatData() который затем возвращает данные в нормализованной форме. Затем эти компоненты используют специальный компонент базы данных для обмена информацией с базой данных. В коде приложения (бизнес-логике) используется только компонент базы данных и, предпочтительно, объекты, которые вы создаете для получения данных, поэтому у вас больше нет строки SQL внутри вашего основного кода.
  • Разделите и покорите свой код приложения. Разделите свой код на скрипты транзакций . Они часто легко создаются из существующего кода спагетти и, вероятно, станут упомянутым Separator, который вы ищете в средние сроки. Затем они будут иметь возможность обрабатывать данные и передавать их (в вывод / представление).
  • Используйте понятный язык . Если у вас есть сложные форматированные строковые данные, которые не нормализованы, напишите сами классы Parser, которые выполняют эту работу для вас и которые можно легко повторно использовать (если это так в вашем приложении). Поскольку вы должны с нетерпением ждать минимизации использования простого SQL в вашем коде, вы также должны с нетерпением ожидать переноса сложных регулярных выражений. Инкапсулировать то, что меняется, является ключевым моментом. То же самое относится к длительным процедурам, чтобы просто обрабатывать некоторые данные (например, сортировать, упорядочивать и изменять его в другом формате), переводить их в компоненты каждого из них и думать о том, как сделать их доступными и повторно используемыми.
  • Создайте свой код : узнайте о логике того, как вы вызываете функциональность в своей программе. Вы можете попытаться отделить функциональность от того, как она вызывается. Например, некоторая процедура, которая вызывает любой из сценариев транзакций . Это может быть необязательно, если вы запрашиваете файлы PHP напрямую через браузер, так как это ваши сценарии транзакций, и веб-сервер позаботится о том, чтобы разрешить отправку команды по URL-адресу в ваше приложение сценарию транзакции. Но вы должны затем обернуть любую логику, необходимую для обработки входящей команды, и ее параметры в повторно используемые компоненты (например, класс Request, который содержит стандартный код для получения URL-адреса и / или переменных из HTTP-запроса).
  • Создайте общую точку входа , включив тот же самый файл в самый верх всех файлов, вызываемых через браузер. Затем вы можете поместить общий код (например, настроить объект состояния сеанса приложения и инициализировать компонент базы данных), а также Application Controller
  • Удалите дублирование , ища буквально дублированный код. Включите его в функцию или класс. Создайте папку библиотеки для вашего собственного приложения, в которое вы включили свои приложения. Если вы следуете общей схеме с Classnames и Namespacing, вы можете легко использовать автозагрузчик, чтобы упростить включение. Сделайте свою библиотеку отдельно от стороннего кода. Поместите весь сторонний код в собственную библиотечную папку с одним подкаталогом для каждого стороннего компонента.
  • Используйте легкие, существующие компоненты. Легкий вес важен, потому что у вас уже есть собственный код, вы не хотите поворачиваться и сразу же нажимаете его на фреймворк. Существующее важно, потому что вы не хотите изобретать колесо. У вас будет достаточно работы для вашего собственного рефакторинга кода. После того, как вы почувствуете себя лучше в своем приложении, и у вас все еще есть сила и воля, вы всегда можете написать все новое. Но если вы одиноки или в небольшой команде, Existing довольно мощный. Простыми библиотеками являются, например:
    • Шаблонный двигатель: Усы
    • Уровень данных: NotORM
  • Создайте состояние приложения , например, как объект, который вы можете использовать в случае, если некоторые компоненты должны знать о состоянии приложения или друг друга без прямого взаимодействия. По умолчанию в PHP, если у вас его нет, глобальные и глобальные статические переменные используются для создания состояния. Однако эти переменные могут сделать вашу жизнь жесткой по мере роста кода. Когда вы создаете объект состояния приложения, ясно, какие компоненты его используют, доступ к нему может контролироваться (например, вызов метода вместо чтения переменной, который может помочь при отладке) и компоненты также могут выяснить, является ли это правильное время в потоке приложения для вступления в действие. Это также хороший инструмент для рефакторинга вашего кода с течением времени.
  • Сохраните рабочее приложение , сохраните свой код в состоянии для запуска. В идеале это было бы подкреплено автоматическими тестами. Подумайте, что вам нужно много переписать. Например, если вы начнете интегрировать компонент базы данных, сделайте это. Переместите весь свой существующий код на один шаг. Итак, кто вам говорит, что он все еще работает? Используйте git для лучшей отмены и тестирования. Это важнее выбора правильной библиотеки. Сохранение рабочего приложения также всегда является ключевым моментом, потому что именно поэтому вы его меняете, не так ли?

Почему бы не использовать шаблонный двигатель? TWIG очень прост в использовании и отлично подходит для такого рода вещей. Он часто используется с каркасом Symfony, но его можно легко использовать самостоятельно.