最近一直在研读HL7 V3 Data Types Release 2 (2009版),与 Release 1(2004版)还是有些不同。不过最主要的感觉还是有点怪异,可能是没有完全理解其思路,尤其是在数据类建立模型上。主要包括:
(1)COMP类
按道理所有数据类型的基类是ANY,但惟独COMP也是一个独立抽象类,不是从ANY继承,且只有一个子类CEQ,二者之间只是compare方法被重载而已。我个人认为COMP类不应存在,它应该是一个方法类,而不是数据类,在ANY完全可以定义一个抽象方法compare(x,y),各个子类进行重载,不需要打破模型中的统一继承思路。并且在ANY类中已经有一个函数equal(x),没有必要再重复弄一个吧?
(2)SET、COLL类
在Release 1中,没有COLL类,LIST类直接从ANY类继承,Release 2中加入了COLL类,感觉应该是所有集合类的基类,其说明如下:
A collection of values which can be enumerated using an iterator.
一个可以被迭代程序列举的值的集合。
其子类
- BAG 无序且值可以重复的集合
- LIST 有序且值可以重复的集合
即COLL类是一个允许成员值重复的集合,但其说明中没有明确提到是允许重复值的。
Release 2中SET类仍然直接从ANY继承,其说明如下:
A value that contains distinct values in no particular order.
一个容纳无序的且相互唯一的多个值的集合。
即SET类是成员值不允许重复的集合,其子类
- DSET,是与COLL类多重继承的类,是一个无序且相互唯一的值集合,从COLL继承的目的是继承Count 方法。
- QSET,是一个无序的且相互唯一的多个数值的集合
即COLL是允许有重复值的,SET是不允许有重复值且无序的。
其实集合的重要区别不外2个:是否允许重复,是否有序。由此可以得到4种组合,也就是4个类就行了。