在程序员上看到《企业开发新思维:COID模式简述》,有感
2006年12月这期的程序员上登了这样一篇文章《企业开发新思维:COID模式简述》,看完全文,我大胆总结了一下,主要的思想应该是使用组合ID建立唯一的对象标识符,然后通过使用一些算法来识别对象..其实我觉得这就是把数据库中的多值属性变为组合ID而已.但是我对这种方法持保留的意见。
"COID ( Class-Object Identifier ) 模式是在企业应用系统的开发中,以一种面向对象的思想来进行逻辑数据库的设计和实现,并以此为基础进行系统架构设计和系统功能实现的一系列技术,其关键特征是采用以ClassID + ObjectID组合成全局唯一的COID主键来标识数据对象。"比如可以这样(原文是C,我用Java来写):
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的思想就跟作者比较接近,把数据库中的元组看成对象,使用面向对象的思想来进行数据库的设计,但是有必要使用这样的"多态"么?总觉得是有些违背数据库的设计原则了。
欢迎大家多讨论,多指导
在程序员上看到《企业开发新思维:COID模式简述》,有感相关推荐
- 本科毕业四年时间如何从月薪7k到年薪60w,讲下个人从菜鸟程序员到公司核心开发工程师的历程!
本科毕业四年时间如何从月薪7k到年薪60w,讲下个人从菜鸟程序员到公司核心开发工程师的历程,本帖主要分享下个人经历,只要努力最终会收获一个相对于自己较好的结果的,工位照镇楼 毕业四年到现在总共换了三份 ...
- 程序员为维持游戏开发被迫炒股,一年内反赚1600万;雷军退任天星银行董事会主席;华为开源Karmada将捐赠CNCF...
点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Your life only lasts for a few de ...
- BAT 程序员们常用的开发工具
阿里篇 一.Java 线上诊断工具 Arthas Arthas 是阿里巴巴 2018 年 9 月开源的一款 Java 线上诊断工具. 使用场景: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 ...
- BAT程序员们常用的开发神器
BAT程序员们常用的开发神器 黄小斜 今天 作者丨InfoQ编辑部 工欲善其事必先利其器,一个优秀的程序员除了代码写得好,善于利用各种开发工具同样可以事半功倍.以 BAT 为代表的各大厂程序员们在平时 ...
- 收藏!!BAT 程序员们常用的开发工具
阅读本文大概需要 15 分钟. 作者:infoQ来源:https://tinyurl.com/y4wohyqt 工欲善其事必先利其器,一个优秀的程序员除了代码写得好,善于利用各种开发工具同样可以事半功 ...
- Python最抢手、Go最有前途,7000位程序员揭秘2019软件开发现状
作者 | 屠敏 整理 报告来源 | JetBrains 转载自 CSDN(ID:CSDNnews) 互联网的下半场,科技公司为面对更加严峻的竞争环境,越来越重视开源节流.而对于身处其中且撑起 IT 半 ...
- 程序员如何精确评估开发时间?
一个程序员能否精确评估开发时间,是一件非常重要的事情.如果你掌握了这项技能,你在别人的眼里就会是这样: 靠谱 经验十足 对需求很了解 延期风险小 合格的软件工程师 正规军,不是野路子 评估开发时间的重 ...
- 程序员开发windows linux,好程序员不用windows作开发环境
好程序员不用windows作为开发环境,今天我想就这个点吐槽一下.最近因为工作关系,需要在windows机器上工作一段时间,作为一个用了多年windows,然后切换到ubuntu作为工作环境两年时间, ...
- .NET 程序员十种常用辅助开发工具
.NET 程序员十种常用辅助开发工具 一: .NET 程序员十种工具 - Visual Studio Converter(转换器工具) Visual Studio .NET 项目转换器(参 ...
最新文章
- Python语言学习之时间那些事:python和时间的使用方法之详细攻略
- 这年头,好文案都被它承包了!
- 关于myBatis的问题There is no getter for property named 'USER_NAME' in 'class com.bky.model.实例类'...
- 前端学习(1339):mongodb更新数据文档
- 前端学习(806):数据类型内存分配
- PID控制器开发笔记之三:抗积分饱和PID控制器的实现
- springbootSecurity的使用
- Part1: Specification of Required Functions
- ssis 包_SSIS包中的错误处理概述
- 17级Biter的微机课程学习总结另外附上19年微机考试题型分布
- NS各种常用资料(转)
- C#WinForm实现对前一篇文章中的SFTP工具类的使用
- LM2596S-ADJ DC-DC降压芯片使用
- idea启动spring boot 错误: 找不到或无法加载主类
- 信息系统项目管理师核心考点(五十四)配置项分类、状态与版本
- flutter如何让行Row的两个子控件分别左对齐和右对齐?
- LCD高抗干扰液晶段码屏显示驱动芯片:VK2C21A/B/BA/C/D 大量应用于音箱/音响面板LCD显示驱动
- 牛顿法求解无约束最优化问题
- Filament 渲染引擎剖析 之 创建渲染对象 1
- 科学万能科计算机科学万能计算机,全能科学型计算器app