2006年12月这期的程序员上登了这样一篇文章《企业开发新思维:COID模式简述》,看完全文,我大胆总结了一下,主要的思想应该是使用组合ID建立唯一的对象标识符,然后通过使用一些算法来识别对象..其实我觉得这就是把数据库中的多值属性变为组合ID而已.但是我对这种方法持保留的意见。
"COID ( Class-Object Identifier ) 模式是在企业应用系统的开发中,以一种面向对象的思想来进行逻辑数据库的设计和实现,并以此为基础进行系统架构设计和系统功能实现的一系列技术,其关键特征是采用以ClassID + ObjectID组合成全局唯一的COID主键来标识数据对象。"比如可以这样(原文是C,我用Java来写):
Long coid;
BaseObject obj
=
getObject(coid);
//
根据组合ID取得对象
obj.onOpen();
//
利用多态调用onOpen方法
是的,我们可以通过在getObject方法中进行判断,使用工厂模式来返回具体的对象,但是这等于把数据库的设计问题转为程序的业务逻辑了。比如文章中说的客户可以是Person, Corporation, Department等,的确可以用这种方法调用他们共同的方法。但是如果Person和Corporation有不同的方法呢?这个方法在BaseObject中没有定义呢?Person和Corporation实现了不同的接口呢?那么有些方法就变得不可见了,又怎么根据是Person和Corporation来进行下一步的操作呢?
文章中说的示例数据:
TPerson:
COID
|
身份证号
|
姓名
|
所属组织机构COID
|
00001000000001
|
640103197709251010
|
张翔
|
000002000000002
|
00001000000001
|
740104198710251041
|
王芳
|
000000000000000
|
|
|
|
|
|
|
|
|
TDepartment:
COID
|
政府部门
|
主管部门COID
|
00003000000001
|
省国土资源厅
|
000003000000002
|
00003000000001
|
市公安局
|
000003000000006
|
|
|
|
|
|
|
TOrder:
COID
|
编号
|
客户COID
|
00003000000001
|
ABC000001
|
000002000000002
|
00003000000001
|
ABC000002
|
000001000000006
|
|
|
|
|
|
|
那么看TOrder表:可以由客户COID来保存多种类型的客户Id。
如果客户类型很多,那么如果人工查看数据库,就不能马上分辨出是什么客户了。
既然要体现多态性,就是说对不同的客户进行不同的操作,那么如果客户种类很少,那么为什么不为每种客户做一个订单表,进行简单清晰的操作呢?
其实我觉得使用ORM的思想就跟作者比较接近,把数据库中的元组看成对象,使用面向对象的思想来进行数据库的设计,但是有必要使用这样的"多态"么?总觉得是有些违背数据库的设计原则了。
欢迎大家多讨论,多指导
分享到:
相关推荐
本代码专门针对SIM公司发行的Coin3D Open Inventor作了修改,所以本代码只能编译,运行在Coin3D环境中。我们已经编译了Debug版本,即使读者没有安装Open Inventor开发环境,也可以直接运行例子程序。我们使用编译器...
为了方便用户使用文件系统,人们又在第一层软件上再覆盖上一层用于文件的管理软件,同样由它来实现对文件操作的细节,并向上提供一组对文件进行存取操作的命令,用户可利用这组命令进行文件的存取。此时用户所看到的...
几个H3C设备CPU、内存的OID,用于网络监控
pSys CMS (http://www.powie.de/cms/index.php?coID=8) 的一个模块,它提供了许多社区功能,如用户留言簿、用户画廊、好友系统、自己的用户字段等等。 完整的管理可以在网络界面中完成。
脚本ini sewaktu-waktu bisa jadi limit ataupun coid jadi jangan salahin作者nya ya goblok。 怎么办 $ cd HP LU BISA RUSAK $ pip install - r requirements . txt $ python main . py 获取令牌, 支持我 • •