J'ai besoin de faire une demande dans une api, et je dois envoyer 11 paramètres, mais en utilisant un outil d'analyse de code, informez que je dois envoyer un maximum de 6. Il y aurait une forme de refactoring pour moi d'envoyer ces paramètres sans être envoyé de cette façon? J'utilise kotlin j'ai simplifié mon code:

viewModel.requestTest(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param10)
class viewModel

fun requestTest (param1 , param2, param3 : String? = "" , param4 : String? = "", param5 : String? = "", param6 : String? = "", param7 : String? = "", param8 : String? = "", param9 : String? = "", param10 : String? = "" , param10: String? = "") {
    //do request filling the body with these parameters
}


0
ramos jc 27 août 2020 à 00:07

2 réponses

Meilleure réponse

Utilisez une classe de données comme wrapper pour les paramètres.

data class RequestParams(val param1: String, ..., val paramN: String)

fun requestTest (params: RequestParams) {
    // use parameters like params.param1
}

Notez que vous pouvez également fournir des valeurs par défaut pour ces paramètres et utiliser des arguments nommés pour simplifier ce type d'appel dans la plupart des cas, par exemple

data class RequestParams(
  val name: String = "foo",
  val value: Int = 3,
  ...,
  val whatever: String? = null)

val params = RequestParams(
  value = 5
)

...

Notez que vous passez toujours plus de 6 paramètres au constructeur de la classe de données, mais que les outils de linting reconnaissent généralement que les classes de données sont un moyen idiomatique de contenir de nombreuses propriétés, et les ignorent lors de la vérification de cette règle (comme indiqué par @Matt Timmermans dans les commentaires de votre question, c'est effectivement le cas).

Si cela ne résout pas votre problème, vous pouvez regrouper vos 10 paramètres en 2 classes de données, avec 5 + 5 ou 4 + 6 paramètres - que cela ait du sens, tout dépend de la signification commerciale sous-jacente de vos paramètres.

Si cela n'a pas de sens de diviser les paramètres de cette façon, j'aurais tendance à ajouter une annotation d'ignorer linter sur le constructeur de classe de données plutôt que de coder spécifiquement pour contourner le linter.

0
Raman 27 août 2020 à 15:59

Je pense qu'il est utile d'utiliser des objets comme Bundle (https: // developer.android.com/reference/android/os/Bundle?hl=en) dans le système Android

0
BlueMist 1 sept. 2020 à 06:34