我用於設計我的應用程序使用更多的數據庫驅動的方法,現在我想從模型開始。我有以下要求,並希望得到你的看法。它基本上是一個活動,與它相關的點。需要域模型的一些幫助
與超級30醫生活動
- 最低4元不等
- 減去一個點,如果你,如果你去了6每月不打最低(4)
- 1點或2點
- 2分當與本地提倡
活性與120醫生
個- 0.5分
活動與合作
- 2點
活動隨訪夥伴會議
- 2點
所以,我試圖決定是否在這裏爲每個活動類型或活動的枚舉使用繼承hiearchy。那麼,是否每個活動都負責計算他們的積分(但在某些情況下,需要知道總活動數量來決定),還是我有一些記分員組件知道所有的邏輯。
任何想法都會很棒!
我有這樣的設計迄今,但我不知道在哪裏可以處理超30規則:
public abstract class ActivityBase {
public int Id { get; set; }
public DateTime Date { get; set; }
public abstract double CalculatePoints();
}
public class SuperThirtyActivity : ActivityBase {
public bool WithCE { get; set; }
public bool WithLocalAdvocate { get; set; }
public override double CalculatePoints() {
if (Date.Month == 3 && Date.AddDays(7).Month == 4)
return 1;
else if (WithCE || WithLocalAdvocate)
return 2;
else
return 1;
}
}
public class OneTwentyActivity : ActivityBase {
public override double CalculatePoints() {
return .5;
}
}
public class PartnershipActivity : ActivityBase {
public override double CalculatePoints() {
return 2;
}
}
我們處理超30規則,我想介紹以下類的。然而,這裏有一些領域的邏輯漏洞。這是好的還是其他的想法?
public class Scorer {
public double CalculateScore(IEnumerable<ActivityBase> activities) {
var score = activities.Select(a => a.CalculatePoints()).Sum();
var count = activities.Count(a => a is SuperThirtyActivity);
if (count < 4)
score--;
else if (count > 6)
score += count;
return score;
}
}
需要更多背景信息 – 2011-03-31 15:06:03
在這種情況下'需求'不清楚;什麼是活動,什麼是觀點等?作爲一個經驗法則,當需求不好時,代碼也不會那麼好。 – Tejs 2011-03-31 15:06:29
活動是與醫生會面。這是一個比賽,所以他們根據活動統計積分。請讓我知道你還需要什麼。 – Marco 2011-03-31 15:08:14