读书人

关于封装对象实现数据库连接的有关问题

发布时间: 2013-01-28 11:49:56 作者: rapoo

关于封装对象实现数据库连接的问题。
我最近在尝试学习面向对象的设计与编程
然后自己在做一个办公自动化的软件
这个软件有很多功能,比如有申请办公用品,审批,领购,统计,导入数据,导出数据。
类似的功能还有很多,我把这些功能抽象为一个类(因为用的是PHP,但是PHP里没有人用模式问题,所来C++交流,就是类似C++的纯虚类)然后具体实现时,其它子类在继承这个纯虚类(PHP中为抽象函数),现在子类要连接数据库,我需要不需要把连接数据库也作为供有函数放到基类中,我尝试用单态模式连接数据库,但是不怎么精通,求高手能指点下具体的实现原理
[解决办法]
有3种设计方式可以选择:

1)如你说的,把数据库操作功能放到基类,然后子类继承并复用这些功能。
2)把数据库操作功能放入一个类,然后其他类合成并复用这些类。
3)将数据库操作功能放入一个singleton类,然后其他类直接使用。

我觉得第3种方式可能更好一些。因为使用继承会增加额外的抽象负担,并增加了不必要的类体系。以后每个需要数据库操作的类都要继承该类,本来不需要体系的类也被迫加入。第2种方式相对来说比第1种好一些,但坏处就是必须在需要的类种合成一个数据库类,增加了一些维护负担。第三种是最好的,相当于一个工具类,在任何地方都可以直接方位,在使用它的类中没有任何的维护开销。
[解决办法]

引用:
引用:有3种设计方式可以选择:

1)如你说的,把数据库操作功能放到基类,然后子类继承并复用这些功能。
2)把数据库操作功能放入一个类,然后其他类合成并复用这些类。
3)将数据库操作功能放入一个singleton类,然后其他类直接使用。

我觉得第3种方式可能更好一些。因为使用继承会增加额外的抽象负担,并增加了不必要的类体系。以……


首先,如果你的程序是单线程的,多个连接会通过程序的多进程实例进行处理,那么并发连接的同步问题应该在进程级别,也就是mysql会处理这种同步。你不需要在singleton上做任何同步处理。

但如果你的程序会给每个连接分配一个线程,每个线程都通过这个singleton处理数据库,那就需要给singleton增加同步语义了。

读书人网 >C++

热点推荐