Автор оригинала: Patrick O’Dacre.
Мне дали хорошие инструкции, простые дизайны и 48 часов.
Прочитайте мое обновление здесь.
Что стоит время?
Да.
Этот раз.
Добро
Если вы когда-либо уволили работу из-за проблемой кодирования, я рекомендую вам придать ему вторую мысль в следующий раз.
Когда мне было представлено вызов, я решил, что, по крайней мере, я бы получил хороший опыт.
Я думал, что могу даже в конечном итоге, я мог бы показать или писать.
Оказалось хорошим способом для меня, чтобы познакомиться с наемным компанией немного лучше; Это дало мне понимание того, что они могут ожидать за роль и от своих разработчиков в целом.
Задача также дала мне возможность попробовать новую структуру – Codeigniteritor.
Большая часть моего опыта Backend с Laravel и WordPress.
Мне понравилось изменение.
Не так хорошо
Мне потребовалось около двух дней, чтобы завершить задание, и это большие вложения, когда вам нужна работа в определенном времени.
Мой совет будет только для того, чтобы подумать только о проблеме, если вы знаете, что вы действительно хотите, чтобы работа.
К счастью, перед вызовом, я смог говорить с разработчиком в компании и получить реальное представление о том, как им нравится делать вещи. Мне понравилось то, что я слышал, поэтому я решил дать ему выстрел.
Мой совет будет делать то же самое, прежде чем вкладывать время в длительный процесс интервью. Проходя через все это неприятности, чтобы узнать, что вам не понравится, компания будет большая пусть.
Если потенциальная компания собирается попросить вас сделать кодирующую проблему, я не думаю, что это будет слишком выходит из строк, чтобы попросить поговорить с одним из своих разработчиков на несколько минут.
Задача начинается
Задача состояла в том, чтобы построить приложение для управления клиентами.
- Показать список магазинов для выбранной страны/города
- Показать список клиентов в выбранном магазине
- Создание/редактирование/удаление клиентов
Хотя он не похож на так много, я вспомнил, насколько легко ослабиться в деталях и несущественным.
Я решил не тратить время настроить идеальную систему сборки или проектирование самой прочной архитектуры.
Я собирался сосредоточиться на написании чистого и простого в читать код.
Время осталось: 48 часов
Настройка и инструменты
Мне дали новую установку Codeigniter и базу данных, чтобы получить настройку.
Мои инструкции должны были использовать jQuery, подчеркивание/Lodash и Bootstrap.
Это означало без фантазии JS Framework Me, и это, вероятно, была самая разочаровывающая часть всего задачи; Количество кода, которое мне пришлось писать, чтобы сделать то, что я хотел, чтобы пользовательский был исчерпан. Я очень пропустил удобства хороших рамх (мой любимый vue.js).
Шаг 1: рабочий процесс переднего конца
Модули и ES6 являются обязательными, поэтому я собрал очень простой настроек WebPack. Ничего особенного. Все, что он сделал, был транпиром и связывает JS.
Затем я загрузил Bootstrap и jQuery и поместил министерзированные версии в моем проекте. Если бы у меня было время, я бы правильно увидил эти зависимости, но мой фокус был на большом неизвестном – Code Gigniter.
Время осталось: 47 часов
Шаг 2: Получение в неизведанные воды
Начало работы с Codeigniter не было слишком плохим.
Сначала у меня были эти бабочки, которые всегда появляются, когда я собираюсь начать что-то новое. Но CI очень доступен, и я был и бежать довольно быстро.
Мне удалось найти несколько плейлистов на YouTube, которые я понял, как CI любит делать вещи. Примерно за 20 минут у меня были настроенные основные маршруты, и имел работоспособность конфигурации, моделей и контроллеров.
Время осталось: 46 часов
Шаг 3: Как загрузить модули JS?
Не имея удобства переднего маршрутизатора, я решил попробовать другой подход к загрузке модулей на их правильные страницы.
Это то, что я придумал:
import main from './assets/main' import stores from './assets/stores' import customers from './assets/customers' $( document ).ready(function() { const page_id = document .getElementById('page_id') .getAttribute('data-module') const modules = { home : main, about : main, stores_index : stores, store_customers : customers } modules[page_id] ? modules[page_id].run() : false });
У меня был контроллер CI, вводимый уникальный идентификатор на каждом файле представления.
На «готов» я схватил удостоверение личности со страницы и загрузите соответствующий модуль. Это работало довольно хорошо.
У меня был модуль магазина для обработки страницы списка основных магазинов, а затем модуль клиентов для обработки страницы управления клиентами управления.
Время осталось: 45 часов
Шаг 4: Просмотр требований
Теперь, когда у меня была приличная основа основана, мне нужно было сосредоточиться на понимании приложения и как я собирался собрать его вместе.
Победы компании для предоставления довольно четких инструкций. Мне даже позволило некоторую творческую свободу при условии, что я встретил все минимальные требования к функциональности.
- Показать список магазинов для выбранной страны/города
- Показать список клиентов в выбранном магазине
- Создание/редактирование/удаление клиентов
Я схватил кусок бумаги и начал зарисовать идеи.
Я давно узнал, что нужно провести щедрое количество времени, думая через функцию, прежде чем писать любой код. Правильное планирование сэкономит вам много часов ненужного рефакторинга.
Время осталось: 44 часа
Шаг 5: REST API с Codeigniteriter
Это легко, куда пошло большую часть моего времени.
Я покончил на следующее:
- CI Query Builder (я действительно скучаю по краснозвенению – ORM Larave)
- Возвращая правильный ответ со статусом, данными и сообщением.
- Доступ к полезной нагрузке на запросе PUT/PATCH.
Как и некоторые, я виновен в том, чтобы чувствовать себя комфортно с определенными инструментами, не прокатив чего-то себя, чтобы понять, что происходит под капотом. Я с нетерпением жду возможности захватить некоторое время, чтобы правильно понять, почему у меня такая трудность достигла этого с CI.
В конце концов, я понял, как сделать все вышеперечисленное с инструментами, которые мне дали. Возможно, некоторые разработки более знакомы с CI могут взглянуть на то, что я придумал как модель для листинга клиентов:
public function list($store_id) { $results = $this->db ->from('customer') ->where('customer.store_id', $store_id) ->join('rental', 'rental.customer_id = customer.customer_id', 'left') ->join('inventory', 'inventory.inventory_id = rental.inventory_id', 'left') ->join('film_text', 'film_text.film_id = inventory.film_id', 'left') ->select('customer.customer_id, customer.first_name, customer.last_name, inventory.inventory_id, inventory.film_id, customer.create_date, customer.last_update, customer.active, rental.return_date, rental.rental_date, customer.email, customer.address_id, film_text.title, film_text.description') ->get() ->result_array(); // rental details grouped by customer_id $customers = group_by($results, 'customer_id'); $customer_list = array_map(function ($customerData) { $rentals = array_filter($customerData, function ($data) { return !empty($data['film_id']); }); // alpha sort usort($rentals, function ($a, $b) { return strcmp($a["title"], $b["title"]); }); $rental_count = count($rentals); $customer = [ 'active' => $customerData[0]['active'], 'create_date' => $customerData[0]['create_date'], 'last_update' => $customerData[0]['last_update'], 'rental_date' => $customerData[0]['rental_date'], 'return_date' => $customerData[0]['return_date'], 'address_id' => $customerData[0]['address_id'], 'email' => $customerData[0]['email'], 'customer_id' => $customerData[0]['customer_id'], 'first_name' => $customerData[0]['first_name'], 'last_name' => $customerData[0]['last_name'], 'rentals' => $rentals, 'rental_count' => $rental_count, ]; return $customer; }, $customers); $customer_list = array_values($customer_list); usort($customer_list, function ($a, $b) { return strcmp($a["last_name"], $b["last_name"]); }); return !empty($results) ? [ 'status' => 200, 'message' => 'Success', 'data' => $customer_list ] : [ 'status' => 204, 'message' => "There aren't any customers at this location.", 'data' => [] ]; }
И я нашел этот маленький помощник для форматирования моего ответа JSON:
function json_output($response) { $ci =& get_instance(); $ci->output->set_content_type('application/json'); $ci->output->set_status_header($response['status']); $ci->output->set_output(json_encode($response)); }
Время осталось: 40 часов
Жизнь, отдых и сон
Шаг 6: Строительство гладких пользовательских интерфейсов
Время осталось: 24 часа
После того, как я получил лучшее сцепление на создании конечных точек API, я наконец был готов сосредоточиться на UI.
Это была удобная и знакомая территория, и я был взволнован, чтобы произвести что-то слик.
Я старался избегать слишком много одержимых имен и организацию класса CSS, и только что добрался до работы.
Вот несколько снимков кода:
Вся эта работа только для обновления пользовательского интерфейса на лету заставила меня ценить, насколько у нас есть это с рамками, как Vue, реагируют и даже угловые.
Некоторые ключевые особенности:
- Во-первых, и фамилии были необходимы для добавления/редактирования клиента. Спецификации призванные к предупреждению при отправке либо отсутствуют, но я вместо этого выбрал просто отключить кнопку «Сохранить», пока оба входов не будут заполнены.
- Я добавил некоторые ошибки и обмен успеха после большинства операций.
- Я использовал модали Bootstrap для добавления, редактирования и удаления данных клиента.
Я не дизайнер, поэтому я был счастлив иметь Bootstrap.
Взглянуть:
После большого количества работы и некоторого сна …
Время осталось: 0 часов
Буду ли я сделать это снова?
Да.
Хотя это простое приложение CRUD едва царапает поверхность того, что делает компетентный разработчик, он дал мне четкий путь, чтобы продемонстрировать некоторые из того, что я могу сделать. Я не хотел бы сделать это за каждую работу, которую я подать заявку, но я думаю, что это было хорошее использование моего времени.
Нашел это интересно/полезно?
Если этот короткий пост каким-либо образом помог вам, пожалуйста, не забудьте дать это рекомендацию ниже и опубликовать краткий комментарий, чтобы поддержать меня.
Комментарии, вопросы и конструктивные отзывы всегда приветствуются.
Меня зовут Патрик О’Дакра, и я разработчик программного обеспечения, который любит строить отличные вещи с великими людьми.
У меня было удовольствие создание наземных систем электронного коммерции, красивые торговые панели по продажам, а также сложные сетки данных с некоторыми невероятно талантливыми людьми, которые помогали, никогда не чувствовали себя как работа.
Некоторые из моих любимых инструментов включают Vue.js, rest.js, node.js и laravel, и я всегда взволнован, чтобы выучить новые вещи.
Я в настоящее время доступен для новых возможностей, поэтому не стесняйтесь связаться .