2024-10-02
Kotlin & 客户端
00

目录

* 一些碎碎念
1 WorkFlow 项目期望功能
2 WorkFlow 结构设计
3 实现计划
* 导入依赖

主要内容:

  1. WorkFlow 项目期望功能
  2. WorkFlow 架构设计
  3. WorkFlow 实现计划

* 一些碎碎念

这是去年被搁置的一个项目,我现在想了想,决定把现在它拿出来重新做,作为我简历上的一个已上线的,有实际作用的大型项目。希望我能独自顺利地完成它。

该项目预期客户端主要技术栈是 Jetpack Compose,后端主要技术栈是 Go Http 三件套。如果有余裕的话倒是想折腾一下 Kotlin.js 看看能不能上前端。

1 WorkFlow 项目期望功能

一开始我对这个项目的预期是一个更高级的文件管理,为文件附加信息,使其更好地进行管理,版本迭代和云端同步。现在我想要对这个应用有更高的期望:我想要它变成一个工作流管理的应用。我设想中的工作流是这样构成的:

  • 项目/任务
  • 人员
  • 资料

从这三方面进行引申,就有了该项目的大致的期望功能:

  1. 项目列表,在这里是对下面三个模块的集成。不仅要对所有的参与的项目管理(增删改查),还能关联相关的要用到的文件和知识库,以及任务中关联到的人。在这里引入一个聊天功能。项目的基本信息由发起者编辑,要用到的文件和知识库可以被参与者编辑等等。
  2. TODO 列表,这里就是仅对用户自身有效的,可以标记为关联到某一项目,可以加闹钟。
  3. 联系人管理,这个没啥好说的。注意单人聊天的功能就不要加了。
  4. 文件管理,包括对文件加 tag,加注释,版本管理等。
  5. 知识库管理,主要是以 Json 方式进行可视化编辑,参考思维导图或者 Neo4j。该知识库可以选择是否公开,可公开的部分可以被任意用户查找并且下载为自己的知识库。

2 WorkFlow 结构设计

  1. 该项目数据库是 SQLite,用 Room 作为 ORM 来读写数据。
  2. 该项目的网络相关库是 OkHttp,Json 怎么存暂时还没想好。
  3. 该项目设置相关的是放到 DataStore 中的。
  4. 统一这些 IO 操作的是 Repository 层,大致是一个模块对应一个 Repository。
  5. 在 Repository 层和页面层中间的是 ViewModel 层,它负责和页面进行数据的交互。所有的状态都在 ViewModel 中,并且提供方法给上层的页面的事件(比如点击按钮一类的)。一个页面对应一个 ViewModel。
  6. 这些结构统一用 Hilt 进行依赖注入。

示例代码如下:

kotlin
// 先是 Repository 层 依赖更下层的 DAO 和 OkHttp 此处仅为示例 class TestRepository @Inject constructor (private val dao: FileEntityDAO) { suspend fun UpdateValueTest(value: Int) { withContext(Dispatchers.IO) { dao.getAllFile() } } } // 再是 ViewModel 层 向上提供状态和接口 @HiltViewModel class TestViewModel @Inject constructor(private val repository: TestRepository) : ViewModel() { private val _data = MutableStateFlow<Int>(1) val data : StateFlow<Int> get() = _data fun updateTestData (value: Int) { _data.value = value viewModelScope.launch { repository.UpdateValueTest(value) } } } // 最后是视图层 这层把 ViewModel 放在 Activity 还是 单独的 Compose 组件里都行 我认为是放在单独成页面的 Compose 组件中比较好 @Composable fun Greeting2(name: String, modifier: Modifier = Modifier) { val viewModel : TestViewModel = hiltViewModel() val data by viewModel.data.collectAsState() var editedData by remember { mutableIntStateOf(data) } TextField( value = editedData.toString(), onValueChange = { newValue -> editedData = newValue.toInt() }, modifier = modifier ) Button( onClick = { viewModel.updateTestData(editedData) } ) { Text( text = "Update" ) } }

3 实现计划

  1. 10月,先把 WorkFlow 这个大致的框架搭起来,功能上先以文件管理和 TODO 列表为主,先在本地跑通。
  2. 11月,开始实现对应后端功能。客户端这块主要是联调和实现用户登录,如果时间来得及,可以把联系人功能加上。
  3. 12月,主要任务是把知识库实现好,这块不太清楚需要怎么实现,所以留足时间。

* 导入依赖

  1. Hilt

在项目级别的build.gradle.kts中导入:

kotlin
plugins { ... id("com.google.dagger.hilt.android")version "2.52" apply false }

在 App 级别的build.gradle.kts中导入:

kotlin
dependencies { ... val hiltVersion = "2.52" implementation("com.google.dagger:hilt-android:$hiltVersion") kapt("com.google.dagger:hilt-compiler:$hiltVersion") implementation("androidx.hilt:hilt-navigation-compose:1.2.0") }
  1. OkHttp

App 级别的build.gradle.kts中导入:

kotlin
dependencies { ... implementation("com.squareup.okhttp3:okhttp:4.12.0") }

警告

Gradle 进行编译不成功的时候,一定要检查以下工具的版本是否对应,这里给出一个版本记录。

  • Gradle 版本:8.9(在 Project Structure 内查看)
  • Gradle 用的 Java 版本:17(在 Settings -> Build, Execution, Deployment -> Build Tools -> Gradle 内指定,也可在 gradle.properties 文件内通过org.gradle.java.home强制指定)
  • Kotlin 版本:2.0.10(在 lib.versions.toml 文件内指定)
  • Compose 组件(也说 Compose Compiler Gradle 插件)版本:依赖 Kotlin 版本(在 lib.versions.toml 文件内指定)
  • KSP 版本:2.0.10-1.0.24(在项目级别的 build.gradle.kts 文件内指定)
  • Kotlin 编译插件(kotlinCompilerExtensionVersion)版本:1.5.5(在 app 级别的 build.gradle.kts 文件内指定)
  • Kotlin 编译源码标准和目标 Java 版本,目标 jvm 版本:17(在 app 级别的 build.gradle.kts 文件内指定)
  • Android Gradle Plugin(agp)版本:8.7.0(在 Project Structure 内查看,也可在 lib.versions.toml 文件内指定)

如果有编译问题,大概率就是这几个东西版本冲突。

本文作者:御坂19327号

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!