摘要: 实际开发过程中,一对多(1:n)的对象关系是非常常见的,比如销售订单(Sales order)下可以有多条订单行(Sales lines),这种关系可以直接使用数据库提供的主/从表关联关系实现。面向对象分析与设计思想并不提倡将数据库作为整个模块甚至系统设计的主要对象。例如,在处理多对多的对象关系时,数据库的简单关联就显得有点力不从心了。在这种情况下,设计人员不得不增加新的数据表,以便将多对多的关系... 阅读全文
posted @ 2009-02-06 15:10 dax.net 阅读(1040) 评论(0) 推荐(0) 编辑
摘要: 在上图中(点击查看大图),BrushBase的GetColor 是一个虚函数,为了提高封装性,我们在此将其定义为受保护成员(Protected)。GetColor 函数的实现部分被摆放在了BrushBase 的子类中,而BrushBase本身却用到了这个虚函数。在模板方法模式中,将GetColor 方法的实现称为延迟实现(Late Implementation),而将调用该方法的方法(BrushB... 阅读全文
posted @ 2009-02-06 15:07 dax.net 阅读(771) 评论(0) 推荐(0) 编辑
摘要: 上文已经提到接口的基本知识,以及如何从面向对象的角度去认知接口与抽象类的联系和区别。本文将从另外的一些技术角度来继续讨论接口和抽象类的取舍问题。首先,在C#中,一个类仅可以继承于一个基类(可以是抽象类,也可以是普通的非密封类),但是它可以实现多个接口。因此,当某个类需要同时拥有多种不同的操作时,封装这些操作的类型就不得不被定义为接口。例如,“学生”实体本身可以根据年龄来比较... 阅读全文
posted @ 2009-02-06 14:55 dax.net 阅读(559) 评论(1) 推荐(0) 编辑