Автор оригинала: Bryan Crotaz.
Чистый
Стремитесь создать красивый чистый дизайн, и у вас будет ремонтомое приложение, с которой радуется работать.
Давайте посмотрим на некоторые способы сделать это.
Создание чистой архитектуры в Ember.js 2.0
Маленький красивый.
Множество небольших компонентов, услуг и шаблонов, которые у каждого есть небольшие, чистые интерфейсы и работа вместе, намного легче писать, тестировать и поддерживать, чем большой монолитный код уровня страницы. Затем вы можете создать страницу от ваших небольших компонентов.
Если ваши кодовые файлы выходят за рамки двух страниц каждый, вы, вероятно, создаете монстр спагетти. Если индивидуальная функция – 20+ строк, вы, вероятно, есть код кода с вилкой.
В этом документе я намеренно не дал образцы кода. Я хочу помочь вам архитекторизировать ваш код лучше, не писать свой код лучше.
Реальные примеры мира
Ниже я дал несколько простых примеров того, как решить реальные мировые проблемы с хорошим дизайном архитектуры.
Мой Back-End имеет нестандартные API
Некоторые из нас достаточно повезло иметь контроль над спиной API. Разве это не сделало хорошее изменение?!
Если ваш API не то, что Ember-Data
Хотелось бы работать, или вам нужно работать с рядом концов (например, эта история пользователя просто импортируйте изображение пользователя из LinkedIn ), то вы будете работать с множеством разных API, очень мало из которых похоже на хороший стандартный отдых/JSON-API.
Используйте SDK Service
Создайте SDK Service, которая управляет AJAX (или что-то еще), вызывает сервер в приятные функции Clean JS с входом и выходом POJO. Верните необработанные данные с сервера. Вы можете рассмотреть возможность раздачи метаданных, которые сервер API может вернуться таким, как версия программного обеспечения сервера, которые не связаны с данными, для которых вы запрашивали.
Тогда вы можете написать код как
this.myServerSdk.updatePerson({ name: "steve", age:57 });
Услуги являются Singletons, поэтому сервис SDK также может обрабатывать отступление во время простоя сервера, ограничивая параллельные задачи, впрыскивая токены auth и т. Д.
Используйте адаптеры Ember-Data и Serializers
Ember-Data
Магазин сделок с хранением моделей. Когда ему нужны данные с сервера, он позвонит в Адаптер
и перевести данные, которые он получает обратно с Сериализатор
Отказ При сохранении данных на сервер ваш адаптер должен звонить Snapshot.Serialize ()
Чтобы получить данные для отправки на сервер. Это будет делегировать сериализацию вашим Сериализатор
Отказ
Когда вы пишете адаптеры и сериализаторы, ключевая вещь – не запутываться обязанностями.
- Адаптеры завернут вызовы методов к серверу. Сериализаторы преобразуют форматы данных на сервер и с сервера.
- Адаптеры асинхронные ( вернуть обещание ). Сериализаторы синхронные ( Вернуть необработанные данные ).
Если вы используете службу SDK, адаптер должен просто сопоставить вызов от Ember Store в одну или много вызовов в службу SDK. Не пытайтесь преобразовать данные здесь – пусть сериализатор делает это.
На Сохранить
Сериализатор должен преобразовать данные из вашего Ember-Data
Модель Снимок
к тому, что ваш сервис SDK ожидает увидеть. На Find, запрос и т. Д. Сериализатор должен преобразовать в другой путь, от всего, что ваш SDK возвращается в полезную нагрузку API JSON.
Я нахожу уверенность в копировании кода между объектами
Это легко – это то, для чего есть смешины. Создайте микну и проверьте его, затем используйте его в других объектах.
у меня есть фоновые задачи, чтобы контролировать
У вас могут быть разные вещи, происходящие на заднем плане:
- загрузки
- Загрузка
- Создание документа на стороне сервера
Создайте сервис, который управляет всем фоновыми задачами и имеет starttask ()
метод. У него должно быть вычисленное свойство, дающее статус для каждой задачи. Вы можете пройти в функции, которая возвращает обещание, или сервис уже не может знать, как выполнить задачу, просто сделающую задачу Config POJO, если у вас нет очень много различных типов заданий.
Затем создайте и протестируйте компонент, который отображает статус для каждой задачи. Вы также можете рассмотреть возможность создания компонента оповещения, который всплывает сообщение о предупреждении при выполнении задачи.
Теперь, наконец, вы можете выбрать, где ставить этот компонент состояния на страницах приложения. Этот бит легкий бит! Если вы разработали свой сервис, чтобы выполнить любую произвольную задачу, вы можете повторно использовать этот код в других проектах. Подумайте о создании аддона Ember-Cli, чтобы долить его.
Все мои проекты имеют общий код
Создайте набор небольших дополнений каждый с небольшим набором ваших многоразовых объектов. Например, вы можете создать один для приведенного выше фонового монитора задания. Он будет содержать службу и компоненты состояния. Затем вы можете протестировать их в изоляции и установить их в каждое приложение, которые нуждаются в них.
Если у вас есть общий набор дополнений, которые вы всегда используете, создайте их индивидуально, а затем создайте аддона библиотеки, который просто имеет зависимости от каждого из индивидуальных дополнений. Затем, если вам нужно другое подмножество для другого приложения, вы можете импортировать их индивидуально или создать другую библиотеку. Вы всегда должны минимизировать свои импортированные надстройки, чтобы вы минимизировать размер вашего Vendor.js
Отказ
В заключении
Чистые архитектуры основаны на большом количестве небольших объектов, каждый каждый делает ровно одну и делать это хорошо. Подумайте о том, чтобы составить ваше приложение с небольших кусочков – если работа может быть разделена на две части, то вам почти наверняка сделайте это. Если эти две части могут быть разделены, то сделайте это тоже.
Вы будете быстро создавать список маленьких рабочих мест, которые легко оценить, и легко проверить. Вы должны быть в состоянии кодировать каждый менее чем в день, если вы уйдете достаточно далеко, поэтому у вас будет постоянное чувство прогресса и завершения, чтобы держать вас хорошо ночью!