Znamená "Prijať Rozhrania" prerušenie odpisov náradie?

0

Otázka

Odpisov

Podporované spôsob označenia funkcie, ako zavrhované je niečo ako toto:

type MyStruct struct {
}

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

Moderné IDEs poukáže na všetky použitia tejto funkcie, a linters môže tiež zvýšiť varovania (nemám osobne kontrolovať to)

Showing the IDE highlight

Prijať rozhrania. Návrat structs.

Populárny najlepší postup je "Prijať rozhrania. Návrat structs." - ktorý má tendenciu podporovať SOLÍDNY dizajn v softvéri.

Avšak, tieto kód, ktorý nasleduje tejto najlepšej praxi - zakrýva odpisov upozornenie:


// 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

Otázka

Je tam riešenie tohto problému?

Keby som bola, napríklad, knižnica subjekty vykonávajúce údržbu: ako sa môžem uistiť, že môj odpisov varovanie vidia používatelia knižnice, ktorí sú aj tieto najlepšiu prax a vymedzenie ich vlastných závislosť rozhrania.

1

Najlepšiu odpoveď

3

To sa zdá logické, keďže metóda rozhrania neboli označené ako zavrhované. Pridaním Deprecated: linky na rozhranie funkcia môže pomôcť v tomto prípade (nemal test, pretože VSCode neumožňuje zatiaľ).

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

V tomto prípade, pretože rozhranie má iba 1 funkciu, mali by ste prestali celú vec. Čo ja viem, je podporovaný godoc/pkg.ísť.dev, vziať Queryer napríklad.

// 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

Jedným z kľúčových aspektov otázka, však, je "ako knižnica subjekty vykonávajúce údržbu, ako môžem zabezpečiť, aby moje odpisov oznámenie je vidieť koncových používateľov?" Knižnica subjekty vykonávajúce údržbu nemá žiadnu kontrolu nad používateľské rozhranie definície, takže sa nemôže dosiahnuť v a pridať odpisov varovanie tam.
Brad Johnson

To sa zdá zvláštne sa mi, že knižnica poskytuje struct a používateľ poskytuje rozhranie, ktoré struct knižnice realizuje. Ak ide o scenár sa obávajú, že by to byť múdrejší kritizovať celý struct, ktoré by mali spôsobiť, že v = MyStruct{} stať postihnutých prostredníctvom
caveman

"To zdá zvláštne sa mi, že knižnica poskytuje struct a používateľ poskytuje rozhranie..." Je, že to, čo rozhrania segregácia zásade podporuje?
Brad Johnson

Pokiaľ viem, rozhranie-segregácia princíp je o prelomenie veľké rozhrania do menších interfeaces, podobne ako "väčší rozhranie, slabšie odber." prejdite príslovie. Myslím si, že závislosť inverzia princíp je viac na hrať tu. Zvyčajne budete chcieť pomocou rozhrania ako parametre tak, skutočná realizácia môže byť vymenený von. Takže je logické, ak chcete definovať rozhrania v balíku a použiť ako vstup. Ale neviem o všetky bežné použitie prípad, kde užívateľ z balíka definuje rozhranie, ktoré knižnica struct implicitne realizuje.
caveman

V iných jazykoch

Táto stránka je v iných jazykoch

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