iandreyshev / android_parser_rss

My first android application. Look master-kotlin branch
0 stars 0 forks source link

Замечания по программе ParserRSS - 2 (Kotlin, CA) #16

Open oMystique opened 6 years ago

oMystique commented 6 years ago
genaku commented 6 years ago

По Clean Architecture.

Интерактор и презентер должны быть независимы друг от друга. У них разные ответственности. Принцип такой: от UI через интерактор отдаются команды, данные, введенные пользователем, и прочее в UseCase. UseCase осуществляет обработку application logic и в качестве ответа отдает команды презентеру обновить UI.

UseCase при обработке application logic может обращаться к бизнес-модели (которая осуществляет бизнес-логику) и хранилищам данных. Для хранилищ данных в Clean Architecture применяется паттерн Repository.

Бизнес-логика - та логика, которая не зависит от приложения. Например, конвертация валюты. Application logic - это логика конкретного приложения: например, при добавлении новой rss-ленты осуществить открытие этой ленты.

oMystique commented 6 years ago

2018-02-01 10 21 40

oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago

из

    private fun parseArticleImage(item: Element, article: Article) {
        val resource = item.getChild(ARTICLE_IMG_NODE) ?: return

        val url = resource.getAttributeValue(ARTICLE_IMG_URL)
        val type = resource.getAttributeValue(ARTICLE_IMG_TYPE)

        if (url == null || !IMAGE_TYPES.contains(type)) {
            return
        }

        article.imageUrl = url
    }
oMystique commented 6 years ago
oMystique commented 6 years ago

А так же...

2018-02-01 11 11 40

oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
oMystique commented 6 years ago
genaku commented 6 years ago

Непонятно зачем интеракторы в каждом методе создают новые UseCase. Сейчас у тебя каждый UseCase - это отдельный async task - сущность из Android framework. UseCase - это application logic, она не должна зависеть от платформы. Слой UseCase должен быть реализован так, чтобы его можно было легко использовать на любой платформе, где поддерживается язык, на которым эти классы написаны. В чистом виде от платформы зависят только самые внешние слои: View и Repository

oMystique commented 6 years ago
oMystique commented 6 years ago
genaku commented 6 years ago

Сейчас у тебя View model Rss знает напрямую о DB model Rss. Возникла необходимость поменять БД на другую. Эту задачу поручили делать другой компании. Они написали новый модуль, отвечающий за хранение данных. Но они не знали, что у тебя ViewModel использует классы из БД. Мы подцепили их модуль и приложение сломалось. Кто виноват?