Skip to content

Instantly share code, notes, and snippets.

@johnkil
Created June 8, 2022 09:57
Show Gist options
  • Save johnkil/2b8b5b008cb8d299bf70be1b99e408dd to your computer and use it in GitHub Desktop.
Save johnkil/2b8b5b008cb8d299bf70be1b99e408dd to your computer and use it in GitHub Desktop.

Задача: Спроектировать Дзен как продукт

  • умная лента
  • поиск*
  • 50 мил DAU
  • текстовые статьи, фото, видео
  • каналы ,можно подписаться
  • уведомления push
  • генерация контента

[Balancer] - кеширование TTL - HTTP2 (GraphQL*) REST json - BD реплики РФ (по закону всю инфу в РФ) Yandex - микросервисная архитектура - авторизацияя - хранение контента (внутри РФ) + кеширование + защита от дос

Service:

  1. Feed / userID - бесконечная лента - персонализированный контент (список по дате публикации)
как кешировать ленту?
  1. Post 2.1 Comments 2.2 Recommendation

  2. Chanels - инфо / стата

  3. Chanel

  • получение по id
  • имя описание подписчики

Feed by chanel ID

  1. Subscribe ? синхронность

Kotlin

Single Activity - Fragment - ViewModel - Coroutines

auth singnIn signUp token accessToken/refreshToken

tls

Retrofit okhttp json kotlinxSerialization

Data - Domain - Presentation

Data

  • Source(retrofit Service, оффлайн room)

  • dto

  • RepositoryImpl

  • Mapper (internal) + validation

  • Сериализаторы

  • sealed interface ApiResponse { data Sucess(value: T) sealled interface Failed {

    } }

    Domain (koltin module)

  • entity

  • usecase

  • repository interface

    Presentation (android module)

  • ScreenViewModel

  • ScreenFragment

  • ScreenNavigation

  • ScreenViewEvent (UiEvent from d.android.com)

  • ScreenViewState (UiState)

  • /model + mapper / StringRes()

feed data - damai

core

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment