N' "Accepter les Interfaces" saut de la dépréciation de l'outillage?

0

La question

La dépréciation

La méthode de marquage des fonctions comme obsolète est quelque chose comme ceci:

type MyStruct struct {
}

// MyFunc returns hello
// Deprecated: Use YourFunc
func (m MyStruct) MyFunc() string {
  return "hello"
}

Les Ide modernes mettra en évidence les usages de cette fonction et linters pourrait aussi soulever des mises en garde (je n'ai pas vérifié personnellement ce)

Showing the IDE highlight

Accepter les interfaces. De retour des structures.

Populaire meilleure pratique est "Accepter les interfaces. De retour des structures." - qui tend à encourager SOLIDE de conception dans le logiciel.

Toutefois, le code suivant qui suit cette meilleure pratique - dissimule la désapprobation d'avertissement:


// MyInterface specifies a single function that we require from a dependency
type MyInterface interface {
    MyFunc() string
}

func main() {

    var v MyInterface
    v = MyStruct{}
    v.MyFunc()

}

Showing the lack of IDE highlighting

Question

Est-il une solution à ce problème?

Si je ont été, par exemple, un responsable de la bibliothèque: comment puis-je m'assurer que mon dépréciation des avertissements sont visibles par les utilisateurs de la bibliothèque qui sont également à la suite de bonnes pratiques et la définition de leur propre dépendance des interfaces.

1

La meilleure réponse

3

Ce qui paraît logique puisque la méthode de l'interface n'a pas été abandonnée. L'ajout de la Deprecated: ligne à la fonction d'interface pourrait aider dans ce cas (n'a pas de test, depuis VSCode n'a pas encore faire cela).

// MyInterface specifies a single function that we require from a dependency
type MyInterface interface {
    // Deprecated: use YourFunc
    MyFunc() string
}

Dans ce cas, car l'interface a seulement 1 fonction obsolète toute chose. Qui je sais est pris en charge par godoc/pkg.aller.dev, prendre Queryer par exemple.

// MyInterface specifies a single function that we require from a dependency
// Deprecated: use YourInterface
type MyInterface interface {
    MyFunc() string
}
2021-11-22 21:18:36

L'une des principales facettes de la question, cependant, est "en tant que responsable de la bibliothèque, comment puis-je assurer ma désapprobation avis est vu par les utilisateurs finaux?" La responsable de la bibliothèque n'a aucun contrôle sur l'interface utilisateur de définitions, de sorte qu'ils ne peuvent pas atteindre et ajouter la dépréciation des avertissements là.
Brad Johnson

Il me semble étrange qu'une bibliothèque fournit une structure et l'utilisateur fournit une interface de la structure de la bibliothèque implémente. Si c'est un scénario que vous êtes inquiet au sujet, il serait plus intelligent de déprécier l'ensemble de votre structure, qui devrait, en conséquence, le v = MyStruct{} pour devenir supprimée
caveman

"Il me semble étrange qu'une bibliothèque fournit une structure et l'utilisateur fournit une interface..." n'Est-ce pas ce que l'interface de la ségrégation principe encourage?
Brad Johnson

Autant que je sache, l'interface-ségrégation principe est de briser les gros interfaces en petits interfeaces, un peu comme le "Le plus gros de l'interface, l'affaiblissement de l'abstraction." aller proverbe. Je pense que l'inversion de dépendance principe est plus en jeu ici. Vous souhaitez généralement à utiliser des interfaces comme les paramètres de la mise en œuvre effective peut être échangé. Donc, il est logique de définir une interface dans un paquet et l'utiliser comme entrée. Mais je ne sais pas du tout commun de cas d'utilisation lorsque l'utilisateur d'un package définit une interface de la bibliothèque struct implicitement met en œuvre.
caveman

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................