Как я могу улучшить три метода, которые немного выполняют другую работу - PullRequest
0 голосов
/ 21 июня 2019

У меня есть следующие методы, которые возвращают конкретные значения объекта в зависимости от того, откуда они вызываются.

 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 ]

2 голосов
/ 21 июня 2019

Если 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 голос
/ 21 июня 2019

Вы можете использовать шаблон Builder для SettingRoamingItem и иметь isRoaming = false, processingText = "", isEnabled = false, isErrorVisible = true, isProgressVisible = false для значений по умолчанию. Затем используйте что-то вроде .withProcessingText ("text"). EnableVisibleError (). Build (), чтобы получить экземпляр, необходимый для ваших получателей.

1 голос
/ 21 июня 2019

Вы можете переписать ваш конструктор со значениями по умолчанию:

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)
1 голос
/ 21 июня 2019

Не так уж много можно сделать, не меняя весь класс.Единственная «простая» вещь - это добавить еще один конструктор, который не имеет параметра isRoaming: во всех трех примерах это значение равно false.Когда вы всегда передаете одно и то же значение: не передавайте это значение, а используйте конструктор с телескопической передачей, чтобы указать это значение по умолчанию.

Помимо этого, если вы хотите тратить больше времени, вам следует обратить внимание наиспользуйте здесь шаблон builder .Например:

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

Смысл в том, чтобы определить те значения для всех этих аргументов, которые наиболее распространены, и использовать их в качестве значений по умолчанию, чтобы только те места, которые отклоняются от значения по умолчанию, выполняли вызовсоответственно изменить настройки по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...