软件开发的生命周期中,数据库建模后,在某个数据库系统中形成相对应的表,之后再根据数据库模型设计相关的业务对象及其关系.这其实是进行了两次设计,一次是数据库模型设计,数据库模型设计是根据现实业务提取出来的模型,这个模型最终是产生了业务数据之间的关系以及业务数据的存储方式.

数据库建模完成后,我们需要根据数据库模型使用某一个种面向对象语言设计出对象模型,对象模型与数据库模型的区别在于对象模型主要是为了使设计过程更加面向对象,抽象、继承、多态、封装,对象模型中的实体与数据库模型中的实体可能基本一致,但也只是对于小型的、业务不太复杂的系统才能可能,对于大型的复杂系统(比如HIS系统),对象模型与数据库模型中的实体要一致则基本不可能.

两次不同角度、不同层面的设计(数据库模型关注存储,对象模型关注OO表达)增加了我们的工作量,而且两次设计之后产生了差异,最终导致了数据库中的实体(表)与对象模型中的实体(对象)产生不一致了,属性字段(数据库中的字段、对象中属性)也可能不一致了,在实际的开发中,必须很熟悉对象的属性对应到哪个表上的字段,这无疑增加了我们的学习成本。

也许,这就是各种ORM框架(如Nhibernate、Entity Framework)的主要目标,目前,ORM框架有轻型的,有重量级的,ORM框架的优劣我们先放一边,从众多项目使用情况来讲,有成功的、也有失败的,从工程师对ORM框架的态度上来看,有嗤之以鼻者、也有疯狂追捧的。每个人的计算方法不一样,各种滋味,还自有自己去体会才行。

话说回来,我们还是回到原始,在没有ORM框架的情况下,如何设计好出色的OO模型,我这里以HIS系统中的患者基本信息来举例。

在数据库系统设计中,在遵循了数据库范式的同时,为了提高效率、减少服务器压力,会进行一定的冗余,比如次例的HIS系统中,患者的基本信息会存储在一种表中,但是对象设计如下:

BaseClass类是抽象的基本类,存储了在业务系统中方便查找患者的五笔码、拼音码、自定义码等,PatientInfo类包含了患者的姓名性别、入院相关信息、费用信息、地址信息、各种编号等,而这些信息又分了几个单独的实体和枚举,有患者性别枚举,患者状态信息枚举,以及定位患者的位置信息类(Plocation类),存储患者各种编号的类(PID类),存储与患者相关的金钱有关的类(MoneyInfo类),这些类的属性对对应到数据库患者基本信息表中的每个列。

结后语:

个人对ORM框架是完全接受并且非常喜欢的,但我认为不是每个项目、每个系统都适合使用ORM,如果能把对象模型设计好还是能有一个维护性好、扩展性好、新人学习成本低的系统。目前我认为对于HIS系统来说,不太适合使用ORM框架,因为HIS业务太复杂,需求很多,变化很大,而一般的HIS厂商往往需要投入开发人员在客户现场进行本地化开发,在现场加字段、加表是常有的事情,这使得HIS厂商必须雇佣软件开发水平较高的人员在驻场开发,使用ORM增加了现场人员的学习压力,间接提高了HIS厂商的投入成本。

HIS系统患者实体OO设计的一点思考的更多相关文章

  1. OO设计

    Todd.log - a place to keep my thoughts on programming 评OO设计 昨天在微博上看到InfoQ提供了一本新书<完美软件开发:方法与逻辑> ...

  2. OO设计原则 -- OO设计的原则及设计过程的全面总结

    这部分增加一点自己的感想,OO设计原则下面讲述的很清晰;看完之后有点感想如果我们在实际开发当中能够把这些原则熟烂于心的话那我们的代码质量和个人能力会有很显著的提神.根据自己的实际经验看很多开发者在开发 ...

  3. OO设计基本原则

    OO本身就是一种大的设计模式,它是随着软件规模越来越大产生出来帮助人们建模和开发的理念,生来就带着封装.继承.多态等可复用基因.为了充分发挥这些基因的功效,使用者需要遵守一定的原则,就是所谓的面向对象 ...

  4. atitit. 日志系统的原则and设计and最佳实践(1)-----原理理论总结.

    atitit. 日志系统的原则and设计and最佳实践总结. 1. 日志系统是一种不可或缺的单元测试,跟踪调试工具 1 2. 日志系统框架通常应当包括如下基本特性 1 1. 所输出的日志拥有自己的分类 ...

  5. 基于Flume的美团日志收集系统(一)架构和设计

    美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收 ...

  6. 基于Flume的美团日志收集系统(一)架构和设计【转】

    美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收 ...

  7. 转:基于Flume的美团日志收集系统(一)架构和设计

    美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收 ...

  8. 瓜子IM智能客服系统的数据架构设计(整理自现场演讲)

    本文由ITPub根据封宇在[第十届中国系统架构师大会(SACC2018)]现场演讲内容整理而成. 1.引言 瓜子业务重线下,用户网上看车.预约到店.成交等许多环节都发生在线下.瓜子IM智能客服系统的目 ...

  9. Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战

    Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台-  什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...

随机推荐

  1. 《Python核心编程》第二版第三章答案

    本人python新手,答案自己做的,如果有问题,欢迎大家评论和讨论! 更新会在本随笔中直接更新. 我在Windows使用python版本是2.7.0 3–10. 异常.使用类似readTextFile ...

  2. 登录SQLServer报错:无法连接到DESKTOP-LDJHQGN

    解决方法:下↓↓↓

  3. linux crontab 计划任务设置 (简结)

    命令: crontab  -l  查看当前运行的计划任务 crontab  -e  编辑当前运行计划任务 修改或添加 VIM编辑器用法:按 i 键进入编辑文本状态, esc 结束编辑状态 , :wq ...

  4. GitHub学生认证示范

    打开网址:https://education.github.com/ 点击Get Your Pack 点击I am  a Student 填写资料上传学生证照片,等待通过,如果没有GitHub账号就注 ...

  5. Objective-C 之深拷贝和浅拷贝

    3月箴言 人的思想是了不起的,只要专注于某一项事业,就一定会做出使自己感到吃惊的成绩来.—— 马克·吐温 1.iOS中关于深拷贝和浅拷贝的概念 浅拷贝:浅拷贝并不拷贝对象本身,只是对指向对象的指针进行 ...

  6. JavaIO流(输入输出操作)

    Java中执行输出和输入操作,需要通过IO流.例如最常见的System.out.println()就是一个输出流.IO流的类比较多,但核心体系就是由File. InputStream .OutputS ...

  7. EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除

    原文链接:http://blog.csdn.net/fanbin168/article/details/51485969   批量插入 (17597条数据批量插入耗时1.7秒)   using Sys ...

  8. (二)ubuntu下安装Amd RX470驱动

    0X:ADM官方下载驱动 https://www.amd.com/en/support 查看本机驱动命令 lspci | grep -i vga 选择自己的驱动 下载对应的版本 现在最新的是:amdg ...

  9. 修复 Cydia 不能上网的问题

    使用 h3lix 越狱 10.3.3 的 iPhone5,进入 Cydia 不能联网解决方法:打开 Cydia,进入已安装列表,点击 Cydia Installer 卸载,然后看到桌面上就没有 Cyd ...

  10. JavaWeb开发使用jsp还是html做前端页面

    一.概述 刚开始学习Javaweb开发的小伙伴都有一个疑惑:用jsp开发前端还是用HTML开发前端呢? 这个疑惑的来源主要是:刚接触完前端但又不深入学习js,接着学习jsp,发现老师们都一直用着jsp ...