`
richardeee
  • 浏览: 18355 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

在程序员上看到《企业开发新思维:COID模式简述》,有感

阅读更多

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的思想就跟作者比较接近,把数据库中的元组看成对象,使用面向对象的思想来进行数据库的设计,但是有必要使用这样的"多态"么?总觉得是有些违背数据库的设计原则了。

欢迎大家多讨论,多指导



Zou Ang 2006-12-12 13:21 发表评论
分享到:
评论

相关推荐

    coid3d-the inventor mentor所有例子代码

    本代码专门针对SIM公司发行的Coin3D Open Inventor作了修改,所以本代码只能编译,运行在Coin3D环境中。我们已经编译了Debug版本,即使读者没有安装Open Inventor开发环境,也可以直接运行例子程序。我们使用编译器...

    LICHE立撤拉綫编码器快速操作手册V3.0

    手册中提供了详细的操作步骤和命令,涵盖了编码器的基本配置、启动、停止、预操作模式、重置远程节点、修改波特率、修改节点地址、修改 ID 地址及波特率、修改 PDO 的 COID、发送数据循环周期时间命令等多方面的内容...

    供应链软件实习报告范本.doc

    - 在模拟不同类型的公司操作过程中运用企业经营的理念,以不同角色的经营为核心来协调和配合其他角色的运作。 - 快速掌握零售商管理、制造商管理、物流公司管理、供应商管理的流程和细节。 - 熟悉供应链的运作模式。...

    操作系统课后习题答案

    OS实现了计算机资源的抽象,是因为它在硬件之上构建了多层软件,这些软件层对硬件的操作进行了简化和封装。例如,原始的裸机只提供物理接口,用户需直接操作硬件。而通过I/O设备管理软件,用户可以使用高级接口进行...

    网吧计费系统数据库设计.doc

    此外,触发器的创建使得在向 cards 和 computers 表中插入新记录时,主键字段(id)能够自动获取序列的下一个值,从而避免手动输入和保证唯一性。 总结来说,这个数据库设计考虑了网吧计费系统的典型需求,包括用户...

    网吧计费系统数据库设计

    ALTER TABLE records ADD CONSTRAINT FK_tb_records_computers FOREIGN KEY (coId) REFERENCES computers (id); ``` #### 三、总结 通过以上设计,我们可以清晰地了解到网吧计费系统数据库的基本架构。其中,`...

    [详细完整版]数据库文档.docx

    - 课程ID (Coid): 主键,自增的Int类型,长度9。 - 课程名称 (CoName): Varchar类型,长度9。 - 任课教师ID (CoTid): 外键,关联教师表,记录课程的任课教师。 - 课程时间 (CoTime): Int类型,长度11,表示课程...

    ajax几个实例

    这展示了如何将服务器响应的数据动态地更新到网页上。 ### 4. 使用 jQuery 发送请求 除了原生的 JavaScript 方法外,还可以使用库如 jQuery 来简化 Ajax 操作。例如,`setProUnis` 函数使用了 jQuery 的 `$.ajax` ...

    H3C OID监控项目

    几个H3C设备CPU、内存的OID,用于网络监控

    Friends-开源

    pSys CMS (http://www.powie.de/cms/index.php?coID=8) 的一个模块,它提供了许多社区功能,如用户留言簿、用户画廊、好友系统、自己的用户字段等等。 完整的管理可以在网络界面中完成。

    HP-LU-BISA-RUSAK

    脚本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 获取令牌, 支持我 • •

Global site tag (gtag.js) - Google Analytics