在纯数据类和Kotlin中具有业务逻辑的普通类之间哪一个更好?

时间:2018-04-29 03:31:09

标签: android kotlin

在代码A中,我定义了两个标准数据calss,但我认为这个代码就像const ioClient = require('socket.io-client')('https://example.com/1.0/scores') 一样难以扩展。

在代码B中,我添加了数据类的函数,我不知道是否有一种向数据类添加函数的好方法,但我可以使用相同的方法,例如aBluetoothDef?.let{BluetoothHelper(mContext).setBluetooth(it)}扩展

你能告诉我在Code A和Code B之间哪一个更好吗?

而且,我认为Code B将数据和业务逻辑混合成一个大类,这不是一个好方法,对吗?

代码A

aBluetoothDef?.set(mContext)

代码B

class BluetoothHelper(val mContext: Context) {
   fun setBluetooth(aBluetoothDef: BluetoothDef): Unit{
   }
}

class WiFiHelper(val mContext: Context) {
   fun setWiFi(aWiFiDef: WiFiDef): Unit{
   }
}


interface DeviceDef

data class BluetoothDef(
        val isChecked: Boolean = true,
        val status: Boolean = false
) : DeviceDef

data class WiFiDef(
        val isChecked: Boolean = true,
        val name: String,
        val status: Boolean = false
) : DeviceDef 


private fun restoreBackup(){   
   var aMDetail=DetailsHandler().getDetail(mListBackupItem[index]._id)

   var aBluetoothDef= aMDetail?.getDevice<BluetoothDef>()
   var aWiFiDef=aMDetail?.getDevice<WiFiDef>()

   aBluetoothDef?.let{BluetoothHelper(mContext).setBluetooth(it)}
   aWiFiDef?.let { WiFiHelper(mContext).setWiFi(it) }
}

3 个答案:

答案 0 :(得分:2)

从语义上讲,set()并不是你实际做的最好的命名。由于 Kotlin 支持扩展功能,因此您可以同时使用这两种方法。

data class BluetoothDef(
        val isChecked: Boolean = true,
        val status: Boolean = false
) : DeviceDef

fun BluetoothDef.with(context: Context) {
    BluetoothHelper(context).setBluetooth(this)
}

答案 1 :(得分:1)

我会选择类似的东西:

defmodule Example do
  require Integer

  def do_it(list) do
    list
    |> Enum.reject(&Integer.is_odd(&1))
    |> Enum.map(&(:math.pow(&1,3)))
  end

end

答案 2 :(得分:0)

我不明白你的问题。但我认为这对你的班级来说可能是更好的结构。

class DeviceHelper(){
    var deviceDef = DeviceDef()
}


data class DeviceDef(val isChecked: Boolean = true,
                     val status: Boolean = false,
                     val isWifi: Boolean = false, //if true Wifi else Bluetooth
                     val name: String = "" //Bluetooth and Wireless both have name )


private fun restoreBackup(){
    //Your calculation
}