Рубрики
Без рубрики

Я только что закончил кодирующую компанию, и вот что я узнал

Мне дали хорошие инструкции, простые дизайны и 48 часов.

Автор оригинала: 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, и только что добрался до работы.

Вот несколько снимков кода:

1.png.
2.png.
3.png.
4.png.

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

Некоторые ключевые особенности:

  • Во-первых, и фамилии были необходимы для добавления/редактирования клиента. Спецификации призванные к предупреждению при отправке либо отсутствуют, но я вместо этого выбрал просто отключить кнопку «Сохранить», пока оба входов не будут заполнены.
  • Я добавил некоторые ошибки и обмен успеха после большинства операций.
  • Я использовал модали Bootstrap для добавления, редактирования и удаления данных клиента.

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

Взглянуть:

5.png.
6.png.
7.png.
8.png.
9.PNG

После большого количества работы и некоторого сна …

Время осталось: 0 часов

Буду ли я сделать это снова?

Да.

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

Нашел это интересно/полезно?

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

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

Меня зовут Патрик О’Дакра, и я разработчик программного обеспечения, который любит строить отличные вещи с великими людьми.

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

Некоторые из моих любимых инструментов включают Vue.js, rest.js, node.js и laravel, и я всегда взволнован, чтобы выучить новые вещи.

Я в настоящее время доступен для новых возможностей, поэтому не стесняйтесь связаться .