Какой из них лучше между чистым классом данных и обычным классом с бизнес-логикой в ​​Kotlin? - PullRequest
0 голосов
/ 29 апреля 2018

В коде A я определяю два стандартных значения данных, но я думаю, что этот код, как и aBluetoothDef?.let{BluetoothHelper(mContext).setBluetooth(it)}, слишком сложен для расширения.

В коде B я добавляю функцию для класса данных, я не знаю, есть ли хороший способ добавить функцию в класс данных, но я могу использовать такой же способ, как aBluetoothDef?.set(mContext) для расширения.

Не могли бы вы сказать, какой из них лучше между Кодом А и Кодом Б?

И еще, я думаю, что код B смешивает данные и бизнес-логику в большом классе, это не очень хороший способ, верно?

Код A

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) }
}

Код 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{
   fun set(mContext: Context){
        BluetoothHelper(mContext).setBluetooth(this)
   }
}

data class WiFiDef(
        val isChecked: Boolean = true,
        val name: String,
        val status: Boolean = false
) : DeviceDef {
    fun set(mContext: Context){
        WiFiHelper(mContext).setWiFi(this)
    }
}


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

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

    aBluetoothDef?.set(mContext)
    aBluetoothDef?.set(mContext)
}

Ответы [ 3 ]

0 голосов
/ 05 мая 2018

Семантически говоря set() - не лучшее название того, что вы на самом деле делаете. Поскольку Kotlin поддерживает функции расширения, вы можете использовать оба подхода одновременно.

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

fun BluetoothDef.with(context: Context) {
    BluetoothHelper(context).setBluetooth(this)
}
0 голосов
/ 06 мая 2018

Я бы пошел с чем-то вроде:

private fun restoreBackup(){   

    val deviceService = DeviceService(context);

    val aMDetail=DetailsHandler().getDetail(mListBackupItem[index]._id)

    deviceService.updateBluetooth(aMDetail.getDeviceDefinition<BluetoothDef>());
    deviceService.updateWifi(aMDetail.getDeviceDefinition<WifiDef>())
}
0 голосов
/ 03 мая 2018

Я не понимаю вашего вопроса. Но я думаю, что это может быть лучшей структурой для вашего класса.

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...