Skip to content

pirateunix/Forecast

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Для реализации поставленной задачи, согласно схеме проектирования MVC, были разработаны модели для работы с БД и API, содержащие основную логику приложения, контроллеры для контроля и обработки полученной от пользователя информации и отображения результатов. Для визуализации воспользовался шаблонизатором smarty.
Единственной входной точкой является index.php, далее все запросы перенаправляются роутером (Router.php) Схема работы роутера: парсим запрос, разделяем на: имя класса, имя метода, параметры. Далее создаем объект данного класса, вызываем нужный метод с заданными параметрами. Было принято решение в БД хранить прогноз погоды для каждого города, данная информация заноситься в БД отдельным скриптом ежедневно по крону, Каждый день обновляется прогноз на существующие даты и добавляется на новые. Благодаря этому мы смогли получить архив погоды за прошедшие дни. Так как API, отдает несколько прогнозов на каждый день, по часам, а нам необходимо отобразить общую информацию за день, было принято решение брать прогноз на 12 часов дня. Так же в БД храним список городов выбранный пользователем. Отображение погоды текущего города в верхнем блоке, сделано с использование cookie. Верстка взята из примера в ТЗ.
Модели: 
1)DbClass.php — класс для работы с базой данных, реализующий паттерн singleton. Благодаря этому мы можем гарантировать что мы будем иметь единственный экземпляр класса, работающего с БД.
2)DbModel.php — абстрактный класс для всех моделей, работающих с БД.
3)ForecastModel.php — в данной модели два метода: выбор из БД прогноза погоды на 3 дня вперед, выбор из БД погды за 3 прошедших дня. Реализация методов: формируем две даты и выбираем из БД прогнозы между этими датами. Так как данные из API получаем с учетом часовых поясов, было принято решение дату +3 дня формировать с временем 23:59:59. Были рассмотрены и другие варианты: 
1. парсить получаемую из API дату, убирать часовой пояс, подставлять свой и записывать в БД со своим часовым поясом. На мой взгляд это менее правильно, хотя вполне работоспособно.
2. во время выборки прогноза из БД выставлять часовой пояс города, по которому делаем выборку. Средствами mongo реализовать это не удалось, средствами PHP, на мой взгляд некорректно с учетом заданных требований.
4)CityModel.php — Содержит методы для добавления и удаления в список выбранных городов, а так же получения данного списка из БД.
5)ApiModel.php — модель для работы с API, в одном методе реализовано по заданному URI. В остальных методах производиться парсинг и выборка необходимых нам данных.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published