【发布时间】:2010-03-21 16:51:47
【问题描述】:
我是设计和电子病历。我已经确定域的中心对象是Patient。患者必须有以下Doctor 和医疗记录。医疗记录是一个分组术语,指的是遭遇、实验室、X 射线、处方......
我是 DDD 的新手,我在一些概念和我对 DDD 的理解方面遇到了问题。下面是显示Encounter 类的代码示例。 Encounter 包含几个属性,它还引用了另一个类 Vitals。
Vitals 在Patient 之外没有任何意义。我仍然使用自己的密钥识别数据库中的生命体征。我不确定这是否使Vitals 成为一个实体。目前我有Vitals 作为值对象。
其次,我的模型构建方式,我将Encounter 定义为Aggregate 根。通过Encounter,医生可以订购实验室、X 光片和开药。基本上Encounter 记录了订购此类物品的原因。
存在一个问题,即我还需要在Encounter 的上下文之外检索这些项目,因此这是否意味着Encounter 不是聚合根。 Vitals 之类的项目只是一个值对象。
这是我的代码...
public class Encounter {
String ChiefComplaint {get; set;}
string Plan {get; set;}
string Assessment {get; set;}
Vital PatientVital {get; set;}
}
public class Vital {
public float Temperature { get; private set; }
public BloodPressure BP { get; private set; }
public int Pulse { get; private set; }
public int Respiratory { get; private set; }
internal Vital(float temperature, int systolic, int diastolic, int pulse, int respiratory) {
this.Temperature = temperature;
BloodPressure bp = new BloodPressure();
bp.Systolic = systolic;
bp.Diastolic = diastolic;
this.Respiratory = respiratory;
this.BP = bp;
}
public void AddBP(int systolic, int diastolic) {
BloodPressure bp = new BloodPressure();
bp.Systolic = systolic;
bp.Diastolic = diastolic;
this.BP = bp;
}
}
public struct BloodPressure {
public BloodPressure(int systolic, int diastolic){
Systolic = systolic;
Diastolic = diastolic;
}
public int Systolic { get; private set; }
public int Diastolic { get; private set; }
public string bloodPressure {
get { return this.Systolic.ToString() + "/" + this.Diastolic.ToString(); }
}
}
【问题讨论】:
标签: domain-driven-design aggregate