Chr*_*ell 4 parameters function
这是一个非常通用的"最佳实践"问题,但这是一个例子.
假设我有一个电影编目应用程序.我想让我的用户有机会为他们的概要/评级信息指定IMDb或Metacritic.
我这样做:
if (preferredSupplier == "imdb"){
getIMDbRating(movieName);
}else{
getMetacriticRating(movieName);
}
Run Code Online (Sandbox Code Playgroud)
或这个:
getRating(movieName, preferredSupplier);
Run Code Online (Sandbox Code Playgroud)
我更喜欢第二个,但这意味着函数必须遵循非常不同的逻辑,具体取决于第二个参数的值(例如,Metacritic可能需要屏幕抓取,其中IMDb可能有一个很好的API).
或者我应该结合它们?在getRating()中充当包装函数,并根据第二个参数的值调用getIMDbRating()或getMetacriticRating().
第二个允许您随着时间的推移扩展首选供应商的数量,您仍然可以(内部)实现这两个单独的方法.
如果这是我,我会看两个类(Imdb和Metacritic),它们都来自RatingProvider基类,并以不同方式实现getRating.
或者,如果我开始使用我的模板,我会看到Bridge模式.
只有你知道你系统中可能发生的变化,所以你知道你是否需要去城里,但是你可以以一种统一的方式获得评分的API,无论他们实际来自哪里,对我来说都是一个比你必须通过选择一种方法或另一种方法做出决定的API更好的API.
| 归档时间: |
|
| 查看次数: |
321 次 |
| 最近记录: |