【发布时间】:2009-05-07 22:06:55
【问题描述】:
这是一个非常通用的“最佳实践”问题,但这里有一个示例。
假设我有一个电影编目应用程序。我想让我的用户有机会为他们的概要/评级信息指定 IMDb 或 Metacritic。
我会这样做吗:
if (preferredSupplier == "imdb"){
getIMDbRating(movieName);
}else{
getMetacriticRating(movieName);
}
或者这个:
getRating(movieName, preferredSupplier);
我更喜欢第二个,但这意味着函数必须遵循完全不同的逻辑,具体取决于第二个参数的值(例如 Metacritic 可能需要屏幕抓取,而 IMDb 可能有一个不错的 API)。
或者我应该将它们结合起来吗?就像 getRating() 充当包装函数一样,根据第二个参数的值调用 getIMDbRating() 或 getMetacriticRating()。
【问题讨论】:
-
你实际拥有的是一个 RatingSupplier 接口,它有一个 getRating(movieName) 函数并在 IMDbRatingSupplier 和 MetacriticRatingSupplier 类中实现?然后你有一个……过度设计的 FTW!
-
哇,我打盹,我输了...他们说什么...
-
有一点需要注意,这假设 IMDB 评级和 Metacritic 评级属于同一类型。您的返回值 range 不应因您的输入而异。
-
@devinb 您可以将评级标准化为一个范围,而不管提供者如何。
标签: parameters function