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开发环境,也可以直接运行例子程序。我们使用编译器...
手册中提供了详细的操作步骤和命令,涵盖了编码器的基本配置、启动、停止、预操作模式、重置远程节点、修改波特率、修改节点地址、修改 ID 地址及波特率、修改 PDO 的 COID、发送数据循环周期时间命令等多方面的内容...
- 在模拟不同类型的公司操作过程中运用企业经营的理念,以不同角色的经营为核心来协调和配合其他角色的运作。 - 快速掌握零售商管理、制造商管理、物流公司管理、供应商管理的流程和细节。 - 熟悉供应链的运作模式。...
OS实现了计算机资源的抽象,是因为它在硬件之上构建了多层软件,这些软件层对硬件的操作进行了简化和封装。例如,原始的裸机只提供物理接口,用户需直接操作硬件。而通过I/O设备管理软件,用户可以使用高级接口进行...
此外,触发器的创建使得在向 cards 和 computers 表中插入新记录时,主键字段(id)能够自动获取序列的下一个值,从而避免手动输入和保证唯一性。 总结来说,这个数据库设计考虑了网吧计费系统的典型需求,包括用户...
ALTER TABLE records ADD CONSTRAINT FK_tb_records_computers FOREIGN KEY (coId) REFERENCES computers (id); ``` #### 三、总结 通过以上设计,我们可以清晰地了解到网吧计费系统数据库的基本架构。其中,`...
- 课程ID (Coid): 主键,自增的Int类型,长度9。 - 课程名称 (CoName): Varchar类型,长度9。 - 任课教师ID (CoTid): 外键,关联教师表,记录课程的任课教师。 - 课程时间 (CoTime): Int类型,长度11,表示课程...
这展示了如何将服务器响应的数据动态地更新到网页上。 ### 4. 使用 jQuery 发送请求 除了原生的 JavaScript 方法外,还可以使用库如 jQuery 来简化 Ajax 操作。例如,`setProUnis` 函数使用了 jQuery 的 `$.ajax` ...
几个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 获取令牌, 支持我 • •