GithubHelp home page GithubHelp logo

weather's People

Contributors

clmct avatar

Watchers

 avatar

weather's Issues

Замечания

Замечания по UI:

  • при попытке посмотреть погоду для конкретного населенного пункта получаем ошибку (видимо из-за отсутствия ключа для запроса)
  • экран ошибки блокирует экран полностью и нету возможности корректно вернуться на карту (стоит подписывать нужный VC протоколом отображения ошибки и отображать внутри как часть экрана)

Замечания по коду (общие):

  • стоит избегать большой вложенности внутри одной функции. При необходимости можно разбить на несколько функций, что бы уменьшить вложенность
  • на счет внедрения зависимостей, стоит посмотреть в сторону использования протоколов (ссылка). Это позволит избежать разрастания кол-ва параметров при большом кол-ве внедряемых зависимостей.
  • строки не локализованы. Стоит сразу добавлять локализацию для строк, даже если язык в приложении один. Потом это делать будет крайне неудобно и долго.
  • для работы с запросами стоит ознакомиться с Alamofire (реализовывать не обязательно), т.к. на наших проектах используется именно этот сторонний фреймворк.
  • DispatchQueue.main.async стоит завернуть внутрь соответствующих сервисов, что бы не вызывать этот блок каждый раз после выполнения метода(замыкания).

struct Main

  • стоит переименовать данную структуру, т.к. не совсем очевидно о чем идет речь

MapViewModelDelegate

  • func showWeather(city: String) неверное именование методов делегирования, советую почитать про общепринятые правила наименования методов (ссылка)

MapViewModel

  • if let city = city { если блок if закрывает всю функцию или блокирует дальнейшее выполнение (внутри имеется return), вместо if стоит использовать guard
  • var city: String? - тут стоит сделать уточнение что это только наименование - cityName. Вообще, чем больше конкретики в имени свойства, тем меньше потом будет проблем при выборе имени для похожего свойства.

MapViewController

  • if let coordinate = self.viewModel?.coordinate { логически этот блок можно вынести в отдельную функцию и заменить if на guard
  • self.locationCardView.snp.remakeConstraints настройку констрейнтов стоит делать вне блока анимации, а вот self.view.layoutIfNeeded() уже анимировать (это замечание касается всех блоков UIView.animate в этом проекте)
  • if isShowKeyboard { аналогично if -> guard. Плюс следующий блок можно вынести в отдельную функцию и закрыть guard, что бы уменьшить вложенность.
  • if let keyboardRect = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue { выглядит массивно и запутанно, лучше вынести парсинг данных отдельно
  • CLLocationDegrees(50) CLLocationDegrees(10) latitudinalMeters: 2000000, longitudinalMeters: 2000000 какие-то magic numbers, такое лучше выносить в константы или хоть как-то обозначить эти переменные

LocationCardView

  • closeCardViewButton избыточные названия тоже стоит избегать, тут и так понятно что это кнопка закрытия окна, можно просто closeButton

WeatherViewModelDelegate

  • тут тоже надо поправить именования
  • func showNetworkError(networkError: NetworkError, completion: @escaping (() -> Void) ) лучше избегать использование замыканий в методах делегирования, т.к. это ломает однонаправленную связь и делает код сложным для понимания и дебага (особенно сложно такой код дебажить в рантайме, проверено).

WeatherViewModel

  • Int(weather.main.temp - 273.15) опять какое-то magic number, не понятно что за число и почему именно его вычитаем. Конечно можно догадаться что это перевод в цельсии, но лучше обозначить константой или вынести в отдельную структуру а-ля TemperatureFormatter или что-то похожее
  • private func getCommonDegrees(deg: Int) -> String { это тоже лучше вынести в отдельный форматтер или что-то подобное. Плюс наименование не совсем корректное (common, на мой взгляд не подходит сюда)
  • var updateView: (() -> Void)? { get set } при наименовании замыканий стоит использовать одинаковый шаблон -> didRequestUpdateView

WeatherViewController

  • viewModel?.updateView = { [weak self] in лучше тело замыкания вынести в функцию update() или несколько функций.

WeatherComponent

  • тут лучше добавить конкретики в именовании, что это именно View - WeatherComponentView

WeatherIconComponent

  • такое же замечание

CLLocation+dmsString

  • если это описание, лучше указывать это напрямую latitudeDescription и longitudeDescription

Замечания #2

Замечания по коду (общие):

  • Не обязательно локализацию строк выносить в константы. Рекомендую посмотреть какое-нибудь готовое решение для простоты использования ресурсов (мы используем R.swift)

MapViewModelDelegate

  • func requiredShowWeather(cityName: String) с наименованием замечание актуально. Должно быть что-то вроде func mapViewModel(_ viewModel: MapViewModel, didRequestShowCityWith name: String) (ссылка)

LocationCardView

  • closeCardViewButton избыточные названия тоже стоит избегать, тут и так понятно что это кнопка закрытия окна, можно просто closeButton

WeatherViewModelDelegate

  • тут тоже надо поправить именования (func weatherViewModelDidRequestClose(_ viewModel: WeatherViewModel)

WeatherViewController

  • setDefaultImageView и setImageView не совсем корректные названия, т.к. ты задаешь не ImageView, а просто Image. То есть надо setImage(_ image: UIImage) и `setDefaultImageView()

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.