【问题标题】:Should I write toJson or fromJson method in Kotlin data class?我应该在 Kotlin 数据类中编写 toJson 还是 fromJson 方法?
【发布时间】:2019-02-13 03:13:59
【问题描述】:

上面提到了 Kotlin 数据类用于存储数据。它相当于数据结构。因此,它不应该有任何行为方法。在干净的代码中,在数据类中实现行为方法会违反许多原则,即 SRP、OCP、...

我想知道fromJsontoJson 方法是否被视为行为方法。如果是,那么我应该在我的代码中哪里实现这些方法?

我正在使用 Kotlin 数据类来存储用户、产品等。在我正在学习的所谓干净的架构和干净的代码中,我将这些数据类限制在仅用于存储域数据的角落。

我试图查找有关此的信息,但似乎找不到任何人谈论数据类和这些方法。

这是我想象的代码。应该是这样的。

data class User(val id: String, val name: String) {
    fun toJson(): Json {}
    fun fromJson(json: Json): User {}
}

或者我应该让其他类负责 toJson 和 fromJson 的实现?

【问题讨论】:

  • 本身有一些函数,如hashCode()toString()copy()。参考:kotlinlang.org/docs/reference/data-classes.html
  • 我认为这与我将要做的不同。这些功能不会改变,因此不会影响干净的代码或干净的架构。
  • 不确定到底有多“干净”
  • 只需使用jacksongsonkotlinx.serialization 之类的库。不要在数据类中创建toJsonfromJson 方法。如果您正在编写一个有时需要将对象转换为 json 的小型应用程序,这应该足够了。如果你在写一个web应用,那么你的framework应该支持json序列化,所有的序列化都由framework完成。
  • 仅供参考,Moshi 是更好的 Gson,如果你想走这条路,Gson 作者会推荐它。

标签: kotlin coding-style clean-architecture


【解决方案1】:

由于您使用干净的架构标记了您的查询,我假设您参考了https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

从这个角度来看,“域实体”应该独立于任何类型的序列化格式、持久性方面或其他特定的“技术”或“框架”。

为域对象处理“持久性无知”的常见模式是存储库模式。在干净架构的上下文中要记住的一个重要方面是存储库的接口在“用例层”(业务逻辑)中定义,而实现在“网关层”甚至“框架层”中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 2013-06-04
    • 1970-01-01
    • 2023-02-08
    • 2012-12-13
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多