用于持久对象的本地查询 - 克服基于字符API的缺陷(译)

        虽然当今的对象数据库和对象关系映射器能很好地让开发人员在查询持久化对象时就像在做本地查询一,但是它们在面向对象程序中看起来仍然像是异地查询。原因在于它们是用简单字符或是用字符修饰的对象图来表示的。让我们来看看如何使用已有的查询系统来完成“查询所有年龄大于 20岁的 Student对象。”
        这个查询(以及文中的其它例子)假设 Student 类已经在示例 1 代码中定义。正如示例 2 代码所示,完全不同的数据访问API体现了完全不同的查询。但是,它们也体现了一些共同的问题:
1.  现代的 IDE不检查嵌入字符串的语法和语意错误。在示例 2代码中,age 字段和“20”被期望为数值类型,但事实上并没有 IDE与编译器检查它们。如果错误的编写了查询代码 ?  改变了名称或是 age 字段的类型  ? 在示例 2中的所有查询将会在运行时中断,而不会在编译时警告。
2.  现代 IDE不会自动提供与名称相应的字符串,因此将导致类模型与查询字符串失去同步。设想由于一个小组决定进行将 Student类中的 age 字段更名为  _age的标准转换。那么现在所有已存在的对 age 的查询将损坏,并且很难去修复。
3.  现代敏捷开发技术鼓励开发一种仍然简洁、新式的类模型,它能够正确表现进化的领域模型。如果查询代码很难维护,那么它会耽误重构设计并且不可避免的导致低质量的源代码。
4.  示例2 代码中的所有查询操作依靠使用 Student类中私有的 student. age 实现,替代了 student. getAge() 或 student. Age(Java / C#)。因此,它们打破了面向对象的封装规则,违反接口与实现相分离的原则。
5.  你需要经常在实现语言与查询语言间切换上下文。不能使用已经存在的实现语言来进行查询。
6.  对创建可复用查询组件没有很好的支持。一个复合查询会生成一个连接的查询字符串,而它们没有编程语言中的任何可复用特征,而这个特征会使查询过程可管理。通过将参数传递给查询字符串的方法仍然显得笨拙和容易出错。

完整内容点击下边地址下载,包括源代码与原文。
http://www.bohuiedu.com//043212/downloads/Native Queries for Persistent Objects.pdf

前些日子听说msdn 开发竞选停刊了,真是非常痛心。ddj china停刊的遗憾还没完全忘却,而现在又一技术刊物也倒下了,真是遗憾,遗憾。这也坚定了我翻译的决心,我要继续将优秀、好的文章奉献给大家。不过,深知自身的英语功底有限,请大家多见谅吧。

最后感谢William R. Cook, Carl Rosenberger写出本文,感谢金山开发的优秀的金山词霸2006软件。谢谢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值