core/README.md

48 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Структура проекта
* Features - набор **законченных** фич проекта. Считается, что любая фича, находящаяся в мастере может быть добавлена в
клиент и использована в нем. Исключением является `common` - это набор вещей, используемых везде. В подпунктах представлены
части, на которые *обычно* разделяется фича
* Common - общая для фичи часть. Тут, как правило, хранятся конвенции путей для сетевых соединений, общие типы и пр.
* Server - часть, включаемая в сервер для подключения фичи. Обычно содержит работу с бд, определение модулей сервера и пр.
* Client - часть с клиентским кодом. В большинстве своём включает работу с сервером, MVVM часть (View при этом должны
находиться в платформенной части, если их нельзя вынести в сommon часть клиента)
* Client - итоговый клиент. На момент написания этой доки (`Пн окт 25 12:56:41 +06 2021`) предполагается два варианта:
* Мультиплатформенный проект со сборкой каждого таргета. Скорее всего, не будет использован в силу сложности настройки
части клиентов (например, андроид)
* Мультимодульный проект
* Server - пока что JVM-only модуль, включающий все необходимые для сервера фичи
____
## Как создать контент?
К примеру требуется создать контент Binary. Для этого необходимо выполнить следующие действия
1. Скопировать папку template из core/features в core/features/content
2. Переименовать эту папку в binary
3. Внутри папки binary заменить все вхождения template на content.binary
4. В файле settings.gradle в массив includes добавить
```kt
":features:content:binary:common",
":features:content:binary:client",
":features:content:binary:server",
```
5. В папке core/features/content/binary/common/src создать серию вложенных ддруг в друга папок commonMain/kotlin/dev/inmo/postssystem/features/content/binary/common
6. В последней папке common создать по ниже приведенным примерам data class
```kt
@Serializable
data class BinaryContent(
val bytes: ByteArray
) : Content
```
и конфигуратор
```kt
object BinaryContentSerializerModuleConfigurator : ContentSerializersModuleConfigurator.Element {
override fun PolymorphicModuleBuilder<Content>.invoke() {
subclass(BinaryContent::class, BinaryContent.serializer())
}
}
```
7. В двух файлах Di, расположенных в core/client/src/commonMain/kotlin/dev/inmo/postsystem/client и core/server/src/main/java/dev/inmo/postsystem/client соответственно
```kt
singleWithRandomQualifier<ContentSerializersModuleConfigurator.Element> { BinaryContentSerializerModuleConfigurator }
```
8. Наверное нужно написать что делать с этим теперь можно?