返回信息流一个应用,用户提供数据,服务器把数据转换之后再返回给用户。现在有若干个相同功能的算法,但是各个算法有不同的配置项(例如a()可以设置运行时间但是对输入规模没限制,b()需要设置输入规模但是没有时间限制),现在想到两种方法:
方法一:
为每个算法设计一个接口,并且定义不同的配置结构体:
func_a(struct config_a *cfg_a);
func_b(struct config_b *cfg_b);
...
方法二:
设计一个统一的接口,把所有的配置项都放在一个结构体里,不同的算法设置对应的项,通过不同的id使用不同的算法:
func(int algorithm_id, struct config *cfg);
请问一下哪个方法比较好呢?或者还有更好的方法?谢谢。
这是一条镜像帖。来源:北邮人论坛 / soft-design / #39196同步于 2010/9/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
[求助]问个接口设计的问题
Xer
2010/9/9镜像同步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 (小x) 的大作中提到: 】
: 赶紧翻了翻设计模式……ms工厂模式是方法二?书上写的是
: Product* Creator::Create (ProductId id) { ... }
: 这个跟方法二比较像……
: ...................
我建议还是用第一种吧。
这两种接口可以互相装换。
其实还有第三种:
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;
}
其实,这第四种和第二种是一样的。
嗯,决定用第一种了。各个算法的细节太多,不好抽象
【 在 wks (cloverprince) 的大作中提到: 】
: 我建议还是用第一种吧。
: 这两种接口可以互相装换。
: 其实还有第三种:
: ...................