У меня есть следующие методы, которые возвращают определенные значения объекта в зависимости от того, откуда они вызываются.
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)
}
Как видите, эти методы просто представляют разные состояния типа объекта; Я хочу понять, является ли это хорошей практикой кодирования, чтобы использовать ее таким образом, или я могу лучше реорганизовать ее.
Мало что можно сделать, не меняя весь класс. Единственная «простая» вещь — это добавить еще один конструктор, у которого нет параметра isRoaming
: во всех трех примерах это значение равно false
. Когда вы всегда передаете одно и то же значение: не передавайте значение, а используйте телескопирование конструктора, чтобы предоставить это значение как «по умолчанию».
Кроме того, если вы готовы потратить больше времени, вам следует изучить использование шаблона строитель здесь. Нравиться:
SettingRoamingItemBuilder().withText("").withProgressVisible(true)..
.build()
Суть в том, чтобы определить те значения для всех этих аргументов, которые являются наиболее распространенными, и использовать их в качестве значений по умолчанию, чтобы только те места, которые отклоняются от значения по умолчанию, должны были сделать вызов для соответствующего изменения значения по умолчанию.
Вы можете использовать шаблон Builder для SettingRoamingItem
и использовать isRoaming = false, processingText = "", isEnabled = false, isErrorVisible = true, isProgressVisible = false
для значений по умолчанию. Затем используйте что-то вроде .withProcessingText("text").enableVisibleError().build(), чтобы получить экземпляр, необходимый для ваших геттеров.
Вы можете переписать свой конструктор со значениями по умолчанию:
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)
Если 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)
Но тогда: зачем вам вообще такие функции?
Но тогда: зачем вам вообще такие функции? - отслеживать состояния объектов в зависимости от вызовов API и привязывать их к пользовательскому интерфейсу
Я имею в виду: если вы можете написать SettingRoamingItem(isErrorVisible = true)
против getRoamingStatusErrorItem()
... но это, наверное, только я...
Это не Java, вы можете удалить тег