Refactoring metóda byť súčasťou rozhrania

0

Otázka

Som bývalý python dev niekedy stretáva s explicitné charakter Ísť. Snažím tu refactor nejaký kód, aby sa mohli presunúť metódou z jednej štruktúry byť súčasťou rozhrania. Ale proces sa zdá divné mi, chcem potvrdiť, nie som, že robím niečo nesprávne.

Mám tieto rozhraní, štruktúra a metódy:

type Executing interface {
    Execute()
}

type MyExecuter struct {
     attribut1 string
}

//The function I wish to move
func (exe1 *MyExecuter) format() string {
    return fmt.sprintf ("formated : %s", exe1.attribut1) 
}


func (exe1 *MyExecuter) Execute() {
    //Executing
    fmt.Println(exe.format())
}



func GetExecuter () Executer{
    return MyExecuter{attribut1: "test"}
}

Tak tu mám generické rozhranie Vykonať, toto rozhranie bude prístupný objekt vrátil GetExecuter metóda.

Teraz, ako súčasť realizácie jeden z mojich Executer, chcem posunúť Formát metódu, ako súčasť rozhranie.
Tak ja robím takto:

type Formatting interface {
    format() string
}

type Formatter struct {}

func (formatter *Formatter) format(exe1 *MyExecuter) (string) {
    return fmt.sprintf ("formated : %s", exe1.attribut1)
}

Tak som sa vytvoriť nové rozhranie, nové prázdne štruktúry, a aktualizovať svoju funkciu brať ako atribút mojej predchádzajúcej štruktúry.

Aj keď to vyzerá pracovať, zdá sa mi, že to je trochu komplikovaný. Osobitne časť, kde som sa musieť pridať odkaz na môj prvotný objekt ako atribút metódy. Robím niečo zle, alebo je to správna cesta?

go interface
2021-11-22 20:42:22
1

Najlepšiu odpoveď

3

Vaše Executer vykonávanie už realizuje Formatting rozhranie:

type Executing interface {
    Execute()
}

type Formatting interface {
    format() string
}

func (exe1 MyExecuter) format() string {
    return fmt.sprintf ("formated : %s", exe1.attribut1) 
}


func (exe1 MyExecuter) Execute() {
    //Executing
    fmt.Println(exe.format())
}

v:=MyExecuter{}
// Here, v implements Executing and Formatting interfaces

Jedna vec k poznámke tu: Váš kód ukazuje ukazovateľ prijímače. To znamená, že metódy sú definované pre *MyExecuter,, ale nie pre MyExecuter. Tak budete musieť prejsť ukazovateľmi struct stupňa pre túto prácu. Alebo, ako som vyššie, použite hodnotu prijímače, takže metódy sú definované pre oboch MyExecuter a *MyExecuter.

2021-11-22 20:47:20

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