Transcript Document

#GeeCON
要讲什么?向后兼容性?
Trisha Gee
来自 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)
查找并修改
collection.findAndModify(query, update);
collection.find(query)
.updateOneAndGet(update);
collection.findAndModify(query,
fields,
sort,
false,
update,
true,
false);
缺乏一致性
最终的一致性
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