如何改善略有不同的工作的三种方法

时间:2019-06-21 12:55:22

标签: kotlin

我有以下方法,这些方法根据调用它们的位置返回对象的特定值。

 fun getRoamingStatusErrorItem(): SettingItem {
        return SettingRoamingItem(
            isRoaming = false,
            processingText = "",
            isEnabled = false,
            isErrorVisible = true,
            isProgressVisible = false)
    }

    fun getRoamingStatusProgressItem(): SettingItem {
        return SettingRoamingItem(
            isRoaming = false,
            processingText = "",
            isEnabled = false,
            isErrorVisible = false,
            isProgressVisible = true)
    }

    fun getRoamingStatusProcessingItem(text: String): SettingItem {
        return SettingRoamingItem(
            isRoaming = false,
            processingText = text,
            isEnabled = false,
            isErrorVisible = false,
            isProgressVisible = false)
    }

如您所见,这些方法仅表示对象类型的不同状态。我想了解这是否是使用这种方式的良好编码习惯,还是可以更好地重构它

4 个答案:

答案 0 :(得分:2)

如果SettingRoamingItem受您控制,则可以为其提供一些默认值,例如:

class SettingRoamingItem(
  val isRoaming : Boolean = false,
  val processingText : String = "",
  val isEnabled : Boolean = false,
  val isErrorVisible : Boolean = false,
  val isProgressVisible : Boolean = false)

那么您的函数调用可以简化为:

fun getRoamingStatusErrorItem() = SettingRoamingItem(isErrorVisible = true)
fun getRoamingStatusProgressItem() = SettingRoamingItem(isProgressVisible = true)
fun getRoamingStatusProcessingItem(text : String) = SettingRoamingItem(processingText = text)

但是然后:为什么您还要使用这些功能?

答案 1 :(得分:1)

在不改变整个班级的情况下,您无能为力。唯一“简单”的事情是添加另一个没有isRoaming参数的构造函数:在所有三个示例中,该值为false。当您始终传递相同的值时:不要传递该值,而应使用构造函数伸缩将该值提供为“默认”。

除此之外,如果您愿意花费更多的时间,则应在此处使用builder模式。喜欢:

SettingRoamingItemBuilder().withText("").withProgressVisible(true)..
  .build()

关键是要为所有这些最常见的参数标识这些值,并将其用作默认值,以便只有那些偏离默认值的地方才需要调用以相应地更改默认设置。 / p>

答案 2 :(得分:1)

您可以为SettingRoamingItem使用构建器模式,并为默认值使用isRoaming = false, processingText = "", isEnabled = false, isErrorVisible = true, isProgressVisible = false。然后使用.withProcessingText(“ text”)。enableVisibleError()。build()之类的东西来获取您的吸气剂所需的实例。

答案 3 :(得分:1)

您可以使用默认值重写您的构造函数:

class SettingRoamingItem(
        var isRoaming: Boolean = false,
        var  processingText :String = "",
        var isEnabled: Boolean = false,
        var isErrorVisible: Boolean = true,
        var isProgressVisible: Boolean = false)



fun getRoamingStatusErrorItem(): SettingItem = SettingRoamingItem(isErrorVisible = true, isProgressVisible = false)


fun getRoamingStatusProgressItem(): SettingItem = SettingRoamingItem(isErrorVisible = false, isProgressVisible = true)


fun getRoamingStatusProcessingItem(text: String): SettingItem = SettingRoamingItem(processingText = text,
        isErrorVisible = false,
        isProgressVisible = false)