Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii
Code

Создание вашего стартапа: приближение улучшений основного функционала приложения

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Securing an API
Using Faker to Generate Filler Data for Automated Testing

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Final product image
What You'll Be Creating

Этот учебник является частью серии Envato Tuts + по Созданию вашего стартапа на PHP. В этой серии я покажу вам полный путь запуска стартапа, начиная с концепции и заканчивая реальным приложением «Планировщик встреч». На каждом шаге я буду выкладывать код планировщика собраний в качестве примеров с открытым исходным кодом, по которым вы сможете учиться. Я также рассмотрю бизнес-вопросы, связанные с запуском, по мере их возникновения.

Как подходить к обновлениями основных функций

В эти дни я чаще всего работаю над добавлением небольших дополнительных улучшений в Meeting Planner. Основные работают очень хорошо, и я стараюсь постепенно улучшать приложение, основываясь на моем видении и отзывах людей. Иногда мое видение связано с большими изменениями, и теперь это может быть тяжелее, потому что кодовая база серьезно выросла.

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

Если вы еще этого не сделали, попробуйте запланировать встречу, и теперь вы можете также планировать мероприятие. Это поможет вам понять, как вы проходите учебник.

Прежде чем мы начнем, не забудьте поделиться своими комментариями и отзывами ниже. Я контролирую их, и вы также можете связаться со мной в Twitter @lookahead_io. Меня особенно интересует, если вы хотите предложить новые функции или темы для будущих учебников.

Напомним, что весь код Планировщика собраний написан с помощью Yii2 Framework для PHP. Если вы хотите узнать больше о Yii2, ознакомьтесь с нашей параллельной серией Программирование с Yii2.

Функция планирования активности

Building Startups - Approaching Major Features - Planning an Activity page

В принципе, планировщик встреч и простой планировщик предназначены для того, чтобы сделать планирование настолько простым, насколько это возможно. Вы предлагаете некоторое время и места и делитесь ими с еще одним человеком, чтобы они могли взвесить разные варианты. Затем вы решаете вместе, и Meeting Planner отслеживает записи календаря, напоминания и простые способы внести коррективы уже по факту.

В качестве примера приведен видеоролик о планировании для групп:

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

Другими словами, я хотел создать панель, подобную той, которая указана ниже, но для действий:

Building Startups - Approaching Major Features - The Older Plan a Time Panel

Архитектура MVC и схема именования кода очень похожи между временем встреч и местами, поэтому создание концепции активности казалась довольно простой. Однако решение об этом имело широкие последствия.

Определение изменений

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

Воздействие на клиента

Со стороны дизайна я подумал о том, как действия будут влиять на обслуживание клиентов:

  • Чтобы добавить новый тип активности, придется изменить процесс организации собрания. На странице планирования появится дополнительная панель.
  • Панель действий должна быть спроектирована так, чтобы позволить людям выбирать из значений по умолчанию или настраивать и добавлять свои собственные, например. Горные лыжи вместо того, чтобы просто кататься на лыжах, или «Пойти посмотреть Звездные войны эпизод первый», вместо просто« Пойти посмотреть фильм».
  • В приглашениях электронной почты должно быть указано место для отображения параметров активности.
  • События календаря захотят интегрировать выбранную деятельность с темой встречи.
  • Организаторы могут захотеть отправить некоторые идеи деятельности другу или группе, не выбрав место, поэтому мне нужно это разрешить. В настоящее время система не позволяет отправлять приглашение, пока не будет предложено хотя бы одно время и место.
  • Если кто-то попросит об изменении собрания, поддержка запросов на изменение потребуется расширить для поддержки действий.

Это было самое очевидное. Теперь давайте подумаем о коде.

Влияние кода

Ветвление исходного кода

Часто полезно сделать отдельную ветку кода в GitHub, чтобы вы могли работать над новой функцией, отдельно от стабильной базы кода. Это позволяет вам возвращаться и исправлять ошибки или делать небольшие инкрементные изменения при работе с крупными изменениями:

Существует только одно правило: все что находится в ветке master идет в деплой.

Поскольку в моей команде только я, и я довольно хорошо управляю своей кодовой базой, я немного не согласен с этим правилом.

Но создание ветки также полезно для просмотра изменений кода, когда вы готовы к тестированию. Я расскажу об этом в конце сегодняшнего урока.

Репликация общего кода

Сейчас будут два типа встреч: те, которые основаны только на датах и времени, а также на мероприятиях, датах и времени. Таким образом, модель встречи должна адаптироваться.

Для времени и места существуют модели MeetingTime и MeetingPlace, а также модели для предпочтений для них с участниками, называемые MeetingTimeChoices и MeetingPlaceChoices. Вы можете больше узнать о построении этого в создании своего стартапа на PHP: планирование доступности и выбора.

Таким образом, добавление действий по существу потребовало бы дублирования их, создавая MeetActivity и MeetingActivityChoices и их сопровождающие контроллеры, модели, представления, JavaScript и Ajax и миграции баз данных.

Настройки аккаунта и встречи

Кроме того, организаторы предпочитают различные настройки учетной записи и настройки собрания независимо то того, могут ли участники предлагать и выбирать окончательный вид деятельности.

Шаблоны для электронной почты

Добавление действий также повлияло на шаблоны электронной почты для приглашений и завершенных встреч.

История событий и журналы

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

Другие области

Файл календаря .ics должен быть изменен для включения активности. В конечном итоге API необходимо будет обновить, а также статистику для панели управления.

Несмотря на то, что это казалось простым, добавление активности на самом деле требовало большого количества нового кода и тестирования.

Основные особенности в коде

Хотя здесь слишком много нового кода для одной статьи, давайте рассмотрим выделенные аспекты из некоторых вышеизложенных концепций.

Миграции баз данных

Во-первых, я создал миграцию базы данных. Раньше я говорил о том, чтобы копировать код с характерными аспектами. Ниже приведен пример миграции MeetingActivity и старой миграции таблицы MeetingTime:

Вот миграция MeetingTime, и вы можете увидеть сходство:

В конечном итоге мне потребовалось пять для следующих новых таблиц:

  1. m161202_020757_create_meeting_activity_table
  2. m161202_021355_create_meeting_activity_choice_table, для хранения предпочтений доступности каждого участника собрания для каждого вида деятельности
  3. m161202_024352_extend_meeting_setting_table_for_activities для настроек конкретной встречи для добавления или выбора действий
  4. m161202_024403_extend_user_setting_table_for_activities для настроек по умолчанию для учетной записи
  5. m161203_010030_extend_meeting_table_for_activities и для добавления is_activity для обозначения свойства встречи с активностью или без нее

Создание структуры MVC для активности

Building Startups - Approaching Major Features - The Gii Scaffolding Menu

Я использовал возможности Yii Gii для создания модели, контроллера и исходных представлений. Я уже рассматривал миграции и Gii ранее в серии.

Изменения JavaScript и jQuery

Были также существенные дополнения к используемому JavaScript и jQuery, особенно теперь, когда взаимодействие с элементами планирования для встречи выполняется с Ajax, без обновления страницы.

Здесь, например, это цикл кода, чтобы узнать, выбрано ли время встречи:

Используя общую схему именования, запись кода для действий была реплицируема из этого:

Другие функции, такие как те, которые отображают ответы пользователю, просто необходимо расширить для действий:

Даже с особенностью, столь отражающей по качеству как существующие функции, добавление нового кода было обширным. Вот, например, JavaScript. Этот код охватывает гораздо больше интерактивной функции ajax времени встречи на странице планирования:

Дополнения фреймворка

Конечно, были модели, контроллеры и отображения, которые нужно было добавить. Вот выдержка из модели MeetingActivity.php, в которой перечислены некоторые действия по умолчанию, которые пользователь может сразу начать использовать:

Building Startups - Approaching Major Features - Activity Typeahead List

И вот выдержка из /frontend/views/activity/_form.php с виджетами TypeaheadBasic с использованием вышеуказанного defaultActivityList():

Но есть много изменений в коде за пределами общих потребностей в инфраструктуре. Вот метод canSend() для Meeting.php, которая определяет, разрешено ли пользователю отправлять приглашение на собрание. Он определяет, соответствует ли собрание минимальным требованиям для отправки, например, время и активность, время и место.

Ниже вы можете увидеть, как новый раздел должен быть добавлен для действий:

Шаблоны для электронной почты

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

Building Startups - Approaching Major Features - Email Invitation Theme

По сути, если собрание имеет активность, то приглашение включает в себя большую строку выше времени и мест, снова повторяя много существующего кода для времени и мест:

Отображение изменений

В конечном счете, для функции активности потребовалась огромная новая ветвь кода. Вот запрос на пул-реквест:

Он был настолько большой, что я решил сделать забавное видео, прокручивающее все изменения в GitHub с соответствующей музыкой, играющей в фоновом режиме ... наслаждайтесь:

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

Функция активности затронула гораздо больше областей, чем я ожидал.

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

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

Есть собственные мысли? Идеи? Обратная связь? Вы всегда можете связаться со мной на Twitter @lookahead_io напрямую. Следите за предстоящими учебниками здесь, в разделе «Создание вашего запуска с помощью серии PHP». Впереди еще много удивительных вещей.

Опять же, если вы еще не опробовали Планировщика собраний или Простой Планировщик, то обаятельно запланируйте свою первую встречу:

Ссылки по теме

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.