在代码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) }
}
答案 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
}