Refactoring วิธีการที่จะเป็นส่วนหนึ่งของส่วนติดต่อ

0

คำถาม

ฉันเป็นแฟนเก่าเป็นภาษาไพธอน dev บางครั้งกำลังพยายามอย่างหนักกับค explicit ธรรมชาติขององไปแล้ว ผมพยายามมาที่นี่เพื่อ refactor บางอย่างรหัสในการที่จะสามารถเลื่อนเป็นวิธีหนึ่งจากโครงสร้างของที่จะเป็นส่วนหนึ่งของส่วนเชื่อมต่อ. แต่โพรเซสดูเหมือนแปลกๆฉันต้องยืนยันผมไม่ได้ทำอะไรบางอย่างเกิดจาก.

ฉันต้องต่อไปนี้ส่วนเชื่อมต่อ,โครงสร้างและวิธีการ:

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"}
}

ดังนั้นอยู่ที่นี่ฉันมีส่วนเชื่อมต่อทั่วไปประมวลผลนี้เชื่อมต่อจะถูกเข้าไปโดยสิ่งกลับมาโดย GetExecuter วิธีการ.

ตอนนี้เป็นส่วนหนึ่งของ implementation ของพวกเธอคนนึงของฉัน Executer ฉันต้องการเพื่อย้ายรูปแบบวิธีการเหมือนเป็นส่วนหนึ่งของส่วนเชื่อมต่อ.
ดังนั้นฉันกำลังทำอะไรต่อไปนี้:

type Formatting interface {
    format() string
}

type Formatter struct {}

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

ดังนั้นฉันสร้างใหม่ส่วนติดต่อใหม่ว่างโครงสร้างและปรับปรุงของฉันฟังก์ชันต้องไปที่แอททริบิวต์ของฉันก่อนหน้าโครงสร้างของ.

ตอนนี้ดูเหมือนจะทำงานสำหรับฉันมันดูเหมือนนี่คือนิดหน่อ convoluted. โดยเฉพาะอย่างยิ่งตอนที่ฉันต้องการที่จะเพิ่มการอ้างอิงต้องของฉันเริ่มต้นสิ่งที่แอททริบิวต์ของวิธีการ. ฉันมาทำอะไรบางอย่างผิดมาที่นี่หรือนี่คือทางที่ถูกต้อ?

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

คำตอบที่ดีที่สุด

3

ของคุณ Executer implementation แล้ว implements ง Formatting ส่วนเชื่อมต่อ:

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

สิ่งหนึ่งที่จะบันทึก:รหัสของคุณแสดงถึง pointer receivers. นั่นหมายความว่าวิธีการของถูกนิยามสำหรับ *MyExecuterแต่ไม่ใช่สำหรับ MyExecuter. ดังนั้นคุณต้องผ่านชี้ประเด็นที่ struct ตัวอย่างสำหรับสิ่งที่จะทำงานแล้ว หรืออย่างที่ฉันทำอยู่เหนือ,ใช้ค่า receivers ดังนั้นวิธีการของถูกนิยามสำหรับทั้งสอง MyExecuter แล้ว *MyExecuter.

2021-11-22 20:47:20

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่