2012-02-24 48 views
0

我想模擬我的域名,目前看起來有點複雜,無助地摔倒。試圖模型域

基本上我們有節點:

  • 一個節點將有一個節點名稱和層次結構數
  • 一個節點有父節點

然後我們有一個每日,每週的費用,每月,每季度,每年它具有:

  • 實際速度
  • 目標速度
  • 已計算價格

然後我們有提供商家的一天,這意味着,在給定的提供商家的一天: 我需要找到一個節點,每天即返回率給定參數,每週一次。 .etc

我已經試過如下

class Node 
{ 
//Pls note that this is pseudo code. 
int Id; 
int HierarchyId; 
string Name; 
Node Parent; 
Rate dailyRate; 
Rate monthlyRate; 
//for all the daily, weekly,monthly,quarterly,yearly rep.. 
.. 
.. 
.. 
} 
public class Rate 
{ 
DateTime BuisinessDay; 
public decimal actual; 
public decimal targeted; 
public decimal computed; 
} 

有代表我的模型的更好的方法來模擬這種?

注意:這必須通過RESTful WCF服務公開。

感謝, -Mike

+0

任何理由,你爲什麼不與實際值,目標值和計算的值創建一個對象率作爲會員並使用它:每日定價;每週價格等? – ndtreviv 2012-02-24 16:40:08

+2

我會避免在子元素內使用ParentNode,這種關係可以說是ParentNode.Children 。與您的「價格」一樣,使用實現IRate接口的簡單結構可以更好地定義這一點,DailyRate:IRate {enum Interval ...},DailyRate.Interval = Daily – Lloyd 2012-02-24 16:45:15

+0

@ndtreviv:這就是我在做的此時此刻。請參閱編輯。問題在於,這涉及到buisiness日。 – Mike 2012-02-24 16:56:15

回答

1

這個例子實在是粗糙的切割。但最根本的「事情」是工作日,周,月,年,季度,十年等都是一回事。沒有「頂級抽象節點thingy」。

你必須真正思考如何訪問任何給定的「循環」;但是一旦你這樣做了,你就會看到例如呼叫CalculateRate傳播到層次結構的底部以獲得該「週期」的正確答案。

遍歷結構

也許你可以定義一個BusinessCycleType枚舉,現在你知道,如果給定的對象是一天,一週,年等

也許創建一個單獨的類,它的導航。我通過BusinessCycleType,或者特定BusinessCycleType,或者一系列BusinessCycleTypes等,想象中獲取對象的方法等

public abstract class BusinessCycle { 

    double rate = 0; 

    // an enum that can make traversing the BusinessCycle structure easier. 
    BusinessCycleType whatAmI; 

    public double AcutalRate {get; set;} 
    public double TargetedRate {get; set;} 
    public double ComputedRate { 
     get { return CalculateRate(); } 
    } 

    // a week has a List of days, a month a list of weeks ... 
    protected List<BusinessCycle> businessCycleLentgh = new List<BusinessCycle>; 

    protected double CalculateRate() { 
     if (businessCycleLength == null) return rate; 

     rate = 0; 
     foreach (BusinessCycle cycleLength in businessCycleLength) { 
      rate += cycleLength.CalculateRate(); 
     } 

     return rate; 
    } 
} // BusinessCycle class 

public class BusinessDay : BusinessCycle { 
    public BusinessDay() { 
     this.businessCycleLength.Add(this);  // so we don't need a special CalcuateRate() - a BusinessDay has no "sub components" 
    } 
} 

public class BusinessWeek : BusinessCycle {} 

public class BusinessMonth : BusinessCycle {} 

public enum BusinessCycleType { 
    Day, Week, Month, Quarter, Year 
}