如何设计一个 DataSource/Service 类以获取网络或本地数据?
假设一个很常见的场景:
XYZMovie(一个虚构电影网站)提供了接口可以让开发者获取某部电影的基本信息(电影名、演员、放映时间、评分等)
接口类似这样:http:api.xyzmovie.com/get?nam...
我利用爬虫缓存了该网站的数据到本地数据库,现在有一个电影查询程序,它应该能设置本地或网络优先查询,如本地或网络查询无果则换另一种查询:
class XYZMovieDataSource
{
XYZMovie GetMovie(string id or name, etc, priority)
{
XYZMovie m;
if(priority == local) { dosomething }
else { dosomething }
return m;
}
XYZMovie GetMovieFromLocal(string id or name, etc) { dosomething }
XYZMovie GetMovieFromNetwork(string id or name, etc) { dosomething }
}
请问有什么更好的设计模式吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
没有发现有使用设计模式的必要,如果非要说,我觉得可以通过url的路径将两种方式区分开,一个叫cache(也就是你的local),一个叫origin(也就是你的network)。
使用 CountDownLatch ,设置为 1,同时多线程去获取远程的本地,谁先获取到,返回谁。
多次运行成功你会发现可以有不同的值
因为
Thread.sleep(new Random().nextInt(3) * 1000);
随机设置他们的快慢正如如果你本地数据库中没有,那么自然就去等待远程了,那么你本地可以不调用
countDownLatch.countDown();
主线程就会一直等待