Upload
trisha-gee
View
4.478
Download
3
Embed Size (px)
DESCRIPTION
Slides from my session at JavaOne Shanghai
Citation preview
Trisha Gee
#GeeCON
来自 10gen 的 Java 驱动程序开发人员@trisha_gee
要讲什么?向后兼容性?要讲什么?向后兼容性?
设计:将需求转化为描述系统的全局架构和功能的技术
规范。
http://homepages.cwi.nl/~paulk/patents/isnot/node4.html
管理大型软件系统的开发 — Winston Royce 博士
http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf
灵活的设计
< 此页特意保留空白 >
设计是一个过程,而不是一个文档
•设计是一次旅行,享受您的旅程
•您会遇到怪物
•也会发现密室
•甚至可能没有目的地……
要讲什么?
史上最好的工作!!史上最好的工作!!
我们出发喽!
向后兼容性
诸多的未知
设计目标
没错,这是一个文档
设计目标•一致性
•更明晰的设计
•直观的 API
•稳健的异常处理
•测试友好
•向后兼容性
缺乏一致性
编码标准
没有分析错误
不再有争执
设计目标✓一致性
•更明晰的设计
•直观的 API
•稳健的异常处理
•测试友好
•向后兼容
用户
认识我们的用户
1. Java 开发人员2.ODM / 其他驱动程序 / 第三方3.贡献者
三类用户
Java 开发人员•一致性
•更明晰的设计
•直观的 API
•稳健的异常处理
•测试友好
•向后兼容
第三方库•一致性
•更明晰的设计
•直观的 API
•稳健的异常处理
•测试友好
•向后兼容
贡献者•一致性
•更明晰的设计
•直观的 API
•稳健的异常处理
•测试友好
•向后兼容
用户是我们的朋友
向后兼容性
架构
UML ,呵呵
高级架构
Scala 驱动程序
设计目标•一致性
✓更明晰的设计
•直观的 API
•稳健的异常处理
•测试友好
•向后兼容
设计目标•一致性
•更明晰的设计
•直观的 API
•稳健的异常处理
•测试友好
•向后兼容
高级架构
选择 1 :包装
选择 2 :连接
向后兼容性?
测试通过
我们赢了!
设计目标•一致性
•更明晰的设计
•直观的 API
•稳健的异常处理
•测试友好
✓向后兼容
我们还活着……
公共 API
设计目标•一致性
•更明晰的设计
•直观的 API
•稳健的异常处理
•测试友好
•向后兼容
注意
•它看起来不像这样
•尚未决定一致的名称
•需要某种适合所有驱动程序的 API
查找collection.find(query).skip(1000).limit(100);
collection.find(query).skip(1000).limit(100);
查找collection.find(query).skip(1000).limit(100);
collection.find(query).skip(1000).limit(100);
collection.find(query, fields);
应选择哪一个?
查找collection.find(query).skip(1000).limit(100);
collection.find(query).skip(1000).limit(100);
collection.find(query, fields);
collection.find(query).fields(fieldsToSelect);
更少的决定
“ Cmd + space”友好
查找collection.find(query).skip(1000).limit(100);
collection.find(query).skip(1000).limit(100);
collection.find(query, fields);
collection.find(query).select(fields);
删除collection.remove(query);
collection.find(query).remove();
查找并修改collection.findAndModify(query, update);
collection.find(query).updateOneAndGet(update);
这令人讨厌!
查找并修改collection.findAndModify(query, update);
collection.find(query)
.updateOneAndGet(update);
collection.findAndModify(query,
fields,
sort,
false,
update,
true,
false);
collection.find(query)
.sort(sort)
.updateOneAndGet(update);
查找并修改collection.findAndModify(query, update);
collection.find(query)
.updateOneAndGet(update);
collection.findAndModify(query,
fields,
sort,
false,
update,
true,
false);
collection.find(query)
.sort(sort)
.updateOneAndGet(update);
collection.find(query)
.sort(sort)
.getOneAndUpdate(update);
缺乏一致性
最终的一致性collection.find(query).limit(10);
collection.find(query).limit(10).remove();
collection.find(query).sort(sortCriteria).getOne();
collection.find(query).sort(sortCriteria).remove();
collection.find(query).sort(sortCriteria).count();
全玩完了
✓ 一致性
• 更明晰的设计
• 直观的 API
• 稳健的异常处理
• 测试友好
• 向后兼容
设计目标•一致性
•更明晰的设计
•直观的 API……
•稳健的异常处理
•测试友好
•向后兼容
我们还活着!
教程 / 外聘讲座
本演讲
设计是一个过程,而不是一个文档
问答问答
您在使用 Java 驱动程序吗?
您喜欢它的什么?
您不喜欢什么?
设计是一个过程,而不是一个文档
问题反馈问题反馈• Trisha Gee• [email protected]•@trisha_gee