Giter Site home page Giter Site logo

typescript-task-1's Introduction

Задача «Приключения Аркадия в Тайплэнде»

Перед выполнением задания внимательно прочитайте:

Настройка IDE

WebStorm включает в себя всё необходимое для работы.

Для VSCode рекомендуется установить следующие плагины:

Доступные команды

Запускаются так: npm run <command>

Команда Действие
build Компиляция TypeScript кода в JavaScript (в директорию dist)
watch Инкрементальная компиляция в фоновом режиме
start Запуск скомпилированного решения
test Запуск скомпилированных тестов
lint Запуск статического анализатора кода
format Запуск утилиты форматирования кода

Основное задание

Мы очень хотим, чтобы код вы написали сами, а не пользовались внешними библиотеками.

На выходных Аркадию позвонил друг из Тайплэнда. У него нашлась интересная работа. Друг давно разрабатывает бэкенды и уже успел написать несколько крутых API с данными о погоде и новостях. Но он ничего не смыслит в интерфейсах, поэтому предложил заняться ими нашему герою. Аркадий отправился в незнакомый город. Нужно помочь ему справиться с этой работёнкой.

На планировании друзья решили, что будут разрабатывать две версии интерфейса — мобильную и десктопную. На мобильном экране должна отображаться информация о последнем измерении погоды и последняя новость. Десктопный экран больше, так что он должен показывать 3 последних новости и 2 последних измерения погоды.

Важным архитектурным решением стало применение паттерна "Наблюдатель". Это должно позволить экранам оперативно реагировать на изменения данных и всегда показывать актуальную информацию.

Некоторые договорённости зарисовали на доске и пошли отмечать встречу.

Interaction

Наутро Аркадий обнаружил, что забыл почти всё о чём они говорили вчера. Вам придётся разобраться.

В директории src вас ждут оставленные наброски приложения. Его составляющие:

  • state — Сущности отвечающие за состояние приложения
  • utils — Вспомогательные абстракции
  • view — "Экраны" приложения

Требования

  • Интерфейс IObservable нужно реализовать в классе Observable

  • NewsState и WeatherState должны отдавать только последние новости и погоду

  • При обновлении данных в хранилищах экраны должны реагировать на изменения

  • Экраны должны реализовывать интерфейс IView и выводить новые данные с помощью console.log

  • console.log должен вызываться методом render() только 1 раз

  • Десктопный экран должен показывать 3 последних новости и 2 последних измерения погоды

  • Мобильный экран должен показывать последнее измерение погоды и последнюю новость

  • Новости выводятся в формате [${time}] ${category} - ${title}

  • Погода выводится в формате [${time}] ${temperature} C, ${pressure} P, ${humidity} U

  • Метод render() у экранов должен выводить контент обёрнутый в блок <div> с соответствующими классами mobile и desktop. Пример вывода:

    <div class="mobile">
    [12:00] JavaScript - Как использовать декораторы с фабричными функциями в JavaScript
    [14:00] -7.2 C, 756.4 P, 76 U
    </div>
    

Примеры можно посмотреть в index.ts и открытых тестах в директории __tests__.

Дополнительное задание (+10 к скорости работы)

Бывает так, что источник данных сбоит и повторно отправляет одни и те же объекты, а render() – дорогая операция. Избавьтесь от лишних вызовов метода render(), реализовав в экранах поверхностное сравнение новых данных с теми, которые были показаны во время прошлого вызова.

Выставлять isStar теперь нужно в src/config.ts

Arkady Strugatsky

typescript-task-1's People

Contributors

evgenymarkov avatar romassol avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.