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

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

    嘟嘟嘟 很简单的折半搜索. 把式子变一下型,得到\(a + b = d - c\). 然后枚举\(a, b\),存到\(map\)里,再枚举\(c, d\)就好了. \(map\)以\(a,b\)两数 ...

  2. TP框架---Model模型层---做模型对象

    TP框架----Model模型层---------------做模型对象 Model模型层是用来做什么的呢???? 主要是用来做操作数据库访问的. 也就说明TP框架自带了一种访问数据库的方式,使用的是 ...

  3. [19/04/25-星期四] GOF23_结构型模式(适配器模式、代理模式)

    一.引言 结构模式:核心作用就是从程序的结构上实现松耦合,从而扩大整体的类结构,用来解决更大的问题. 二.适配器模式(adapter) 生活中假设笔记本是标准的USB接口但是外置键盘是圆形接口,这时候 ...

  4. docker-6-DockerFile解析

    1.是什么 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 构建三步骤: 1.编写Dockerfile文件 2.docker build 3.docker ...

  5. linux下搭建禅道项目管理系统

    1.禅道下载:                 #官网:http://www.zentao.net/article-browse-1067.html [root@localhost ~]# wget ...

  6. Springboot中使用ibatis输出日志

    logging.level.org.apache.ibatis=DEBUG logging.level.org.mybatis=DEBUG logging.level.java.sql.Connect ...

  7. 关于selenium获取token sessionid

    # 获取sessionid def get_sessionid(self): # 是要从localStorage中获取还是要从sessionStorage中获取,具体看目标系统存到哪个中 # wind ...

  8. DPDK硬件盒子的初步安装测试

    DPDK硬件盒子 接口 两个USB接口:用于连接键盘等. HDMI接口:高清晰度多媒体接口,用于连接显示器,但是一般的电脑显示器使用的是VGA口,可以用一个转接头连接. 两个RJ接口:可接入网线连接. ...

  9. Project Euler:Problem 86 Cuboid route

    A spider, S, sits in one corner of a cuboid room, measuring 6 by 5 by 3, and a fly, F, sits in the o ...

  10. Struts2+AJAX+JQuery 实现用户登入与注册功能

    要求:必备知识:JAVA/Struts2,JS/JQuery,HTML/CSS基础语法:开发环境:MyEclipse 10 关于UI部分请查看下列链接,有详细制作步骤: 利用:before和:afte ...