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 发表评论

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

  1. 本科毕业四年时间如何从月薪7k到年薪60w,讲下个人从菜鸟程序员到公司核心开发工程师的历程!

    本科毕业四年时间如何从月薪7k到年薪60w,讲下个人从菜鸟程序员到公司核心开发工程师的历程,本帖主要分享下个人经历,只要努力最终会收获一个相对于自己较好的结果的,工位照镇楼 毕业四年到现在总共换了三份 ...

  2. 程序员为维持游戏开发被迫炒股,一年内反赚1600万;雷军退任天星银行董事会主席;华为开源Karmada将捐赠CNCF...

    点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Your life only lasts for a few de ...

  3. BAT 程序员们常用的开发工具

    阿里篇 一.Java 线上诊断工具 Arthas Arthas 是阿里巴巴 2018 年 9 月开源的一款 Java 线上诊断工具. 使用场景: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 ...

  4. BAT程序员们常用的开发神器

    BAT程序员们常用的开发神器 黄小斜 今天 作者丨InfoQ编辑部 工欲善其事必先利其器,一个优秀的程序员除了代码写得好,善于利用各种开发工具同样可以事半功倍.以 BAT 为代表的各大厂程序员们在平时 ...

  5. 收藏!!BAT 程序员们常用的开发工具

    阅读本文大概需要 15 分钟. 作者:infoQ来源:https://tinyurl.com/y4wohyqt 工欲善其事必先利其器,一个优秀的程序员除了代码写得好,善于利用各种开发工具同样可以事半功 ...

  6. Python最抢手、Go最有前途,7000位程序员揭秘2019软件开发现状

    作者 | 屠敏 整理 报告来源 | JetBrains 转载自 CSDN(ID:CSDNnews) 互联网的下半场,科技公司为面对更加严峻的竞争环境,越来越重视开源节流.而对于身处其中且撑起 IT 半 ...

  7. 程序员如何精确评估开发时间?

    一个程序员能否精确评估开发时间,是一件非常重要的事情.如果你掌握了这项技能,你在别人的眼里就会是这样: 靠谱 经验十足 对需求很了解 延期风险小 合格的软件工程师 正规军,不是野路子 评估开发时间的重 ...

  8. 程序员开发windows linux,好程序员不用windows作开发环境

    好程序员不用windows作为开发环境,今天我想就这个点吐槽一下.最近因为工作关系,需要在windows机器上工作一段时间,作为一个用了多年windows,然后切换到ubuntu作为工作环境两年时间, ...

  9. .NET 程序员十种常用辅助开发工具

     .NET 程序员十种常用辅助开发工具      一: .NET 程序员十种工具 - Visual Studio Converter(转换器工具) Visual Studio .NET 项目转换器(参 ...

最新文章

  1. Python语言学习之时间那些事:python和时间的使用方法之详细攻略
  2. 这年头,好文案都被它承包了!
  3. 关于myBatis的问题There is no getter for property named 'USER_NAME' in 'class com.bky.model.实例类'...
  4. 前端学习(1339):mongodb更新数据文档
  5. 前端学习(806):数据类型内存分配
  6. PID控制器开发笔记之三:抗积分饱和PID控制器的实现
  7. springbootSecurity的使用
  8. Part1: Specification of Required Functions
  9. ssis 包_SSIS包中的错误处理概述
  10. 17级Biter的微机课程学习总结另外附上19年微机考试题型分布
  11. NS各种常用资料(转)
  12. C#WinForm实现对前一篇文章中的SFTP工具类的使用
  13. LM2596S-ADJ DC-DC降压芯片使用
  14. idea启动spring boot 错误: 找不到或无法加载主类
  15. 信息系统项目管理师核心考点(五十四)配置项分类、状态与版本
  16. flutter如何让行Row的两个子控件分别左对齐和右对齐?
  17. LCD高抗干扰液晶段码屏显示驱动芯片:VK2C21A/B/BA/C/D 大量应用于音箱/音响面板LCD显示驱动
  18. 牛顿法求解无约束最优化问题
  19. Filament 渲染引擎剖析 之 创建渲染对象 1
  20. 科学万能科计算机科学万能计算机,全能科学型计算器app

热门文章

  1. 2022山东省安全员C证特种作业证考试题库及模拟考试
  2. 考点图文详解 - 局域网与城域网(第四章)
  3. 1455:【例题1】Oulipo——字符串哈希
  4. idea创建maven工程没有src文件夹,或者是maven文件结构不能完整创建,可能是因为你的网速问题
  5. 如何让笨重的架构变灵巧?
  6. [ZT]精彩的国外育儿教育读本,图文并茂
  7. #96 百度大规模网络流量接入技术 BFE 开源
  8. docker启动失败问题之/var/lib/docker/overlay
  9. 今天跟我薅当当羊毛!4 折买正版书了!!
  10. 记录学习 python-机器学习 02