.github/workflows | ||
client | ||
features | ||
gradle/wrapper | ||
server | ||
.gitignore | ||
build.gradle | ||
changelog_parser.sh | ||
defaultAndroidSettings.gradle | ||
extensions.gradle | ||
github_release.gradle | ||
gradle.properties | ||
gradlew | ||
gradlew.bat | ||
mppAndroidProject.gradle | ||
mppJavaProject.gradle | ||
mppJsProject.gradle | ||
mppProjectWithSerialization.gradle | ||
PostsSystem.drawio | ||
publish.gradle | ||
publish.kpsb | ||
README.md | ||
settings.gradle |
Структура проекта
- Features - набор законченных фич проекта. Считается, что любая фича, находящаяся в мастере может быть добавлена в
клиент и использована в нем. Исключением является
common
- это набор вещей, используемых везде. В подпунктах представлены части, на которые обычно разделяется фича- Common - общая для фичи часть. Тут, как правило, хранятся конвенции путей для сетевых соединений, общие типы и пр.
- Server - часть, включаемая в сервер для подключения фичи. Обычно содержит работу с бд, определение модулей сервера и пр.
- Client - часть с клиентским кодом. В большинстве своём включает работу с сервером, MVVM часть (View при этом должны находиться в платформенной части, если их нельзя вынести в сommon часть клиента)
- Client - итоговый клиент. На момент написания этой доки (
Пн окт 25 12:56:41 +06 2021
) предполагается два варианта:- Мультиплатформенный проект со сборкой каждого таргета. Скорее всего, не будет использован в силу сложности настройки части клиентов (например, андроид)
- Мультимодульный проект
- Server - пока что JVM-only модуль, включающий все необходимые для сервера фичи
Как создать контент?
К примеру требуется создать контент Binary. Для этого необходимо выполнить следующие действия
- Скопировать папку template из core/features в core/features/content
- Переименовать эту папку в binary
- Внутри папки binary заменить все вхождения template на content.binary
- В файле settings.gradle в массив includes добавить
":features:content:binary:common",
":features:content:binary:client",
":features:content:binary:server",
- В папке core/features/content/binary/common/src создать серию вложенных ддруг в друга папок commonMain/kotlin/dev/inmo/postssystem/features/content/binary/common
- В последней папке common создать по ниже приведенным примерам data class
@Serializable
data class BinaryContent(
val bytes: ByteArray
) : Content
и конфигуратор
object BinaryContentSerializerModuleConfigurator : ContentSerializersModuleConfigurator.Element {
override fun PolymorphicModuleBuilder<Content>.invoke() {
subclass(BinaryContent::class, BinaryContent.serializer())
}
}
- В двух файлах Di, расположенных в core/client/src/commonMain/kotlin/dev/inmo/postsystem/client и core/server/src/main/java/dev/inmo/postsystem/client соответственно
singleWithRandomQualifier<ContentSerializersModuleConfigurator.Element> { BinaryContentSerializerModuleConfigurator }
- Наверное нужно написать что делать с этим теперь можно?