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