【渐进】浅尝DDD,对"试卷"建模
2010-09-30 21:05:10 来源:WEB开发网试卷分块:分块将维持试题索引范围
/// <summary>
/// 试卷分块
/// </summary>
public class PaperPart : ICloneable
{
//构?
public PaperPart()
{
this.QuestionRang = new QuestionIndexRang(-1, -1);
this.QuestionList = new List<QuestionInfo>();
}
/// <summary>
/// ?取或?置分块下的??索引?围 ?不存在??则索引??为-1
/// </summary>
public QuestionIndexRang QuestionRang { get; set; }
/// <summary>
/// ?取或?置?分块下的??列?
/// </summary>
public List<QuestionInfo> QuestionList { get; set; }
#region ICloneable 成员
public object Clone()
{
PaperPart clone = this.MemberwiseClone() as PaperPart;
//处理引用
return clone;
}
#endregion
}
试卷试题列表:此设计用于映射分块中的试题,并控制对其的调用,使得对它的相关操作能映射至实际的试题。
/// <summary>
/// 试卷的试题列表
/// </summary>
public class PaperQuestionList : CustomList<QuestionInfo>
{
/// <summary>
/// 所在的?卷
/// </summary>
public Paper Paper { get; private set; }
/// <summary>
/// 初始化
/// </summary>
/// <param name="paper"></param>
private PaperQuestionList(Paper paper)
: base()
{
this.Paper = paper;
}
/// <summary>
/// 生成试卷的试题列表
/// </summary>
public static PaperQuestionList Create(Paper paper)
{
PaperQuestionList list = new PaperQuestionList(paper);
//拼接
list.Paper.PaperPartList.ForEach(o => { list._list.AddRange(o.QuestionList as IEnumerable<QuestionInfo>); });
return list;
}
/// <summary>
/// 重载索引器
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public override QuestionInfo this[int index]
{
get
{
return base[index];
}
set
{
bool flag = false;
int count = 0;
for (int i = 0; i < this.Paper.PaperPartList.Count; i++)
{
if (flag) break;
for (int j = 0; j < this.Paper.PaperPartList[i].QuestionList.Count; j++)
{
if (count == index)
{
//修正实际引用
this.Paper.PaperPartList[i].QuestionList[j] = value;
flag = true;
break;
}
count++;
}
}
base[index] = value;
}
}
}
更多考虑
对于模型的接口和属性暴露:本文所提及的设计并非采用贫血模型,模型内部需维持主要逻辑,对于对外接口和属性应慎重,如对于引用类型的属性,应考虑使用者有可能并不总是按照设计者的预期来使用,因此最小化设计原则和按需暴露接口,或者返回接口而非真实引用尤为必要。
领域模型并非为传输而设计,若希望模型同时能够支持跨层传输和序列化,则需额外注意相关属性和字段的设计和暴露。
DDD是从业务出发,关注业务,以业务价值为导向的设计方法,测试和业务的实现均是由它出发,以对象而不是关系数据库作为模型基础,而对于存储则不是业务人员需要过多关心,通常web开发者习惯了数据驱动设计,总是希望实体和数据库一一映射,那么您恐怕需要换个思路思考了,因而一个强有力的ORM框架支持也是DDD的执行的保证。
出处:http://wsky.cnblogs.com/
更多精彩
赞助商链接