如何更好地组织一个有很多领域的班级?

时间:2010-10-01 11:03:47

标签: oop

我目前正在实施与医院内部网站类似的内容,医生可以在其中查看有关患者的信息。

目前,我有很多关于每位客户的信息:他的全名,出生日期,血型,他住的地方,他患有的疾病等等。

我的第一次尝试是某种形式:

class Client {
    private string fullName;
    private Date dateOfBirth;
    ...

    public Get/Set FullName()
    public Get/Set DateOfBirth()
    ...
}

基本上将所有内容放在同一个类下。

过了一会儿,我决定将类似的概念拼凑成一个更普遍的概念。例如,我可以将userNamepassword封装到同一个概念中 - 例如LoginInfo

  1. 如果这样做,我是否应该在Client类上提供将工作委托给正确的内部概念的所有getter / setter,或者我应该为概念本身添加getter?第一种方法可以屏蔽外部世界到Client类的实现,但是也许,通过拥有所有这些内在概念,我们不会赢得那么多。
  2. Client类以外的代码是否应该知道在其中使用的不同类型的概念?
  3. 任何其他想法/方法?
  4. 我仍然不太了解我需要在Client课上使用哪些方法。也许如果有很多,那么使用小的内部概念来组织类似的方法本身就是一个好主意,而不是拥有这样一个松散耦合的大类。

    Client的数据将全部使用标准数据库保留,如果这有任何区别的话。

2 个答案:

答案 0 :(得分:1)

我想说将相关的数据包装到公共类中是有用的。我只会在Client中为非常常用的属性提供委派的getter / setter(如果是这样的话 - 它应该是个案决策)。如果一个概念在问题领域有意义,那么将它暴露给外界也是可以的。您的LoginInfo在这方面是一个边缘细节,但疾病史,健康检查结果等等是这方面的主要候选人。

我还建议你查看Martin Fowler的优秀Analysis Patterns,其中有一章专门介绍医疗保健模式;你可能会从中得到一些有用的想法。

答案 1 :(得分:1)

决定如何组织数据时需要考虑的事项:是否有跟踪数据历史记录的要求。例如,您是否需要知道5年前患者的地址是什么(当然除了知道他们当前的地址)?如果是这样,那么将“历史敏感”数据作为自己的类,可能会让您在未来的路上更容易。当然,一些数据不会“历史敏感” - 例如出生日期。 :)

需要考虑的其他事项:患者之间将共享哪些数据?如果您保留有关家族病史的数据,那么这些数据是否应该在兄弟姐妹之间分享?如果是这样,那么将数据封装在自己的对象中将为您节省大量的复制/同步痛苦。

分析数据时,这些不是唯一的考虑因素。但他们肯定是这个难题的一部分。