gpt4 book ai didi

android - Kotlin 中的 OOP 和函数式编程(设计)

转载 作者:行者123 更新时间:2023-11-29 23:04:44 24 4
gpt4 key购买 nike

我最近开始使用 Kotlin 进行 Android 开发。它是面向对象的,但也支持像 lamdas、monads 等函数式结构。

我正在考虑利用两个世界的好处。我想按如下方式设计我的应用程序的层,

------ 面向对象 ---------- || -------------- 功能性 ---------------------- ----------------------------
View -> ViewModel -> Usecases -> Repositories -> Data layer/DataSources -> Network

我想遵循的一些准则:

  1. 我的应用程序的状态将存储在 View 模型层中并显示在 View 层中。

  2. 功能层将是无状态的,仅包含纯函数。它将提供的输入转换为所需的输出。他们不必担心它运行的环境,也应该运行更少的上下文。

  3. Android 组件不应进入功能层。它专用于业务逻辑

  4. Viewmodel 层包含应用程序逻辑和表示逻辑。 State 在该层中作为 Livedata 公开

  5. View 订阅实时数据并在收到通知时更新 View 。

  6. 用例是业务逻辑单元

  7. Viewmodel 会将不可变状态对象副本传递给用例层。

  8. 从 View 模型到用例的通信将卸载到后台线程并在 UI 线程中进行反向通信,这样我就不必担心后台线程接触我的 View 。

  9. UsecaseExecutor 应该用于执行任何用例,因为它是一个负责使用协程卸载的用例

  10. 所有纯函数都应该进行单元测试

  11. 存储库抽象数据源

  12. 网络层将联系其余服务,数据层接收响应 JSON/XML,解析并返回相应的模型或错误。

  13. 所有可以抛出错误的函数都应该有返回类型 Either< Failure,Success > monad

  14. 失败应该是一个密封类

我想知道这个设计中的缺陷或我没有注意的地方以及一些要遵循的最佳方法。

最佳答案

如果你想在 kotlin 中使用功能特性,你需要添加一个像 arrow 这样的功能库,因为 kotlin 核心不提供许多基本的功能特性,比如你在第 13 点说的 Either monad,光学和其他一些.除此之外,我认为设计很好

关于android - Kotlin 中的 OOP 和函数式编程(设计),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56672122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com