问题来源:
在某个信息系统中,建立了一个用户类,代表可以登录系统的用户。用户类的属性有姓名,密码等。一段时间后,想给系统添加个性化桌面的功能。于是添加了一个新的类,桌面类。桌面类与用户类存在一对一关系。每个用户应当拥有自己所对应的桌面,即用户类需要进行修改,以满足需求。这破坏了设计模式中提到的开闭原则(对修改封闭,对扩展开放)。如果不修改用户类,设计看起来会很怪,也很麻烦。
同样的问题在关系数据库里则清晰的多。开始建立一个用户表,包括姓名,密码等字段。随后,建立桌面表,桌面表包含与用户表建立关系的外键。利用查询动态的在用户表与桌面表之间建立关系即可。不用对原来的设计进行任何改动。
原因分析:
面向对象对关系的处理是静态的,也就是对象之间的关系是通过程序一次性声明的,不能动态修改。而关系数据库则可以利用查询在表之间动态建立关系。关系数据库对关系的处理更灵活,功能更强大。
解决方案:
可以将关系的描述单独抽取出来表示,采用一定的注入机制将代码注入到主类里去。