BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #39196同步于 2010/9/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

[求助]问个接口设计的问题

Xer
2010/9/9镜像同步9 回复
一个应用,用户提供数据,服务器把数据转换之后再返回给用户。现在有若干个相同功能的算法,但是各个算法有不同的配置项(例如a()可以设置运行时间但是对输入规模没限制,b()需要设置输入规模但是没有时间限制),现在想到两种方法: 方法一: 为每个算法设计一个接口,并且定义不同的配置结构体: func_a(struct config_a *cfg_a); func_b(struct config_b *cfg_b); ... 方法二: 设计一个统一的接口,把所有的配置项都放在一个结构体里,不同的算法设置对应的项,通过不同的id使用不同的算法: func(int algorithm_id, struct config *cfg); 请问一下哪个方法比较好呢?或者还有更好的方法?谢谢。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
coolfantasy机器人#1 · 2010/9/9
我觉得可以参考工厂模式
coolfantasy机器人#2 · 2010/9/9
也就是方法一了 【 在 coolfantasy (Cool) 的大作中提到: 】 : 我觉得可以参考工厂模式
zxsword机器人#3 · 2010/9/9
方法二中,把algorithm_id这个域,置于结构体中是不是会好一点?
Xer机器人#4 · 2010/9/9
赶紧翻了翻设计模式……ms工厂模式是方法二?书上写的是 Product* Creator::Create (ProductId id) { ... } 这个跟方法二比较像…… 方法一的接口有点多,如果以后会调整算法的参数也不好修改。 方法二隐藏了算法的接口,也想隐藏算法的细节,但是感觉被config结构出卖了,这样还不如用方法一比较清晰。 总的来说倾向于方法二,不知道有没有其它更好的模式…… 【 在 coolfantasy (Cool) 的大作中提到: 】 : 标 题: Re: [求助]问个接口设计的问题 : 发信站: 北邮人论坛 (Thu Sep 9 17:09:57 2010), 站内 : : 也就是方法一了 : : 【 在 coolfantasy (Cool) 的大作中提到: 】 : : 我觉得可以参考工厂模式 : : : -- : : 微博 http://t.sina.com.cn/coolfantasy : : : ※ 来源:·北邮人论坛 bbs.byr.cn·[FROM: 114.251.120.*]
Xer机器人#5 · 2010/9/9
哦,也对…… 【 在 zxsword (YNWA) 的大作中提到: 】 : 方法二中,把algorithm_id这个域,置于结构体中是不是会好一点?
coolwc机器人#6 · 2010/9/13
完美主义害死人 【 在 Xer (小x) 的大作中提到: 】 : 赶紧翻了翻设计模式……ms工厂模式是方法二?书上写的是 : Product* Creator::Create (ProductId id) { ... } : 这个跟方法二比较像…… : ...................
wks机器人#7 · 2010/9/13
我建议还是用第一种吧。 这两种接口可以互相装换。 其实还有第三种: func_a_with_conf = function() { func_a(myconf); } 调用的时候: func_a_with_conf(); 可惜,C语言不允许这样。 或者,第四种: typedef struct { void (*func)(struct config_a*); struct config_a *conf; } Closure; void closure_call(Closure *clos) { clos->func(clos->conf); } int main() { struct config_a = {...}; Closure clos = {func_a, &my_conf); closure_call(&clos); return 0; } 其实,这第四种和第二种是一样的。
Xer机器人#8 · 2010/9/13
初学者都会纠结于某个细节…… 【 在 coolwc (小包) 的大作中提到: 】 : 完美主义害死人
Xer机器人#9 · 2010/9/13
嗯,决定用第一种了。各个算法的细节太多,不好抽象 【 在 wks (cloverprince) 的大作中提到: 】 : 我建议还是用第一种吧。 : 这两种接口可以互相装换。 : 其实还有第三种: : ...................