繁体   English   中英

调用外部结构的方法的合适设计模式是什么? [关闭]

[英]What's an appropriate design pattern to call outer struct's method? [closed]

例如,我有一个父结构Connection和一个子结构Dialect如下:

type Connection struct {
    conn *net.TCPConn
    databaseDialect DatabaseDialect
}

func (c *Connection) modifySQL(sql string) (string, error) {
}

// Close cleans up
func (c *Connection) Close() error {
    ...
}

func (c *Connection) handleConnection() error {
    c.databaseDialect = &PostgreSQLDialect{
        conn: c.conn,
        modifySQLFunc: c.modifySQL,
    }
    return dialect.HandleConnection()
}

type DatabaseDialect interface {
    HandleConnection()
}

type PostgreSQLDialect struct {
    conn *net.TCPConn
    modifySQLFunc func(string) (string, error)
}

func (d *PostgreSQLDialect) HandleConnection() error {
    buff := make([]byte, 0xffff)
    d.conn.Read(buff)
    sql := parseToSQL(buff) // parse buffer to SQL statements
    
    // call outer's function here
    sql, err = d.modifySQLFunc(sql)
    ...
}

可以看到外层 function modifySQLPostgreSQLDialect中传递。 但事情可能更复杂。 假设我们需要调用更多的外部函数。 例如,当连接关闭时。 我们需要调用外部的 function Close()来清理资源。 所以我很好奇PostgreSQLDialect是否需要对外部结构Connection有一个引用变量。 但我只是觉得让我的代码架构良好并不是一个好的设计。

有没有适合这种情况的设计模式? 欢迎任何开源 repo、源代码或文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM