public class StudentProfile
{
public string Name {get; set;}
public string ContactAddress {get; set;}
public DateTime CreatedDate{get; set;}
public double PredictedIQScore {get; set;}
public double PredictedEQScore {get; set;}
public double Param1 {get; set;}
public double Param2 {get; set;}
public double Param3 {get; set;}
...
public double Param20 {get; set;}
}
我有另一個類,StudentProfileEvaluation其被構造參照StudentProfile。有不同的評估方法可以根據StudentProfile的參數值計算學生的IQ和EQ。
該類的用途是StudentProfileEvaluation用於存儲這些信息。
public class StudentProfileEvaluation
{
public StudentProfileEvaluation(StudentProfile studentProfile)
{
ParentStudentProfile = studentProfile;
}
public readonly ParentStudentProfile;
private double? predictedIQScore;
private double? predictedEQScore;
public double PredictedIQScore
{
get
{
if (predictedIQScore.HasValue)
return predictedIQScore;
else
return ParentStudentProfile.PredictedIQScore;
}
set
{
predictedIQScore = value;
}
}
public double PredictedEQScore
{
get
{
if (predictedEQScore.HasValue)
return predictedEQScore;
else
return ParentStudentProfile.PredictedEQScore;
}
set
{
predictedEQScore = value;
}
}
public double Param1
{
return ParentStudentProfile.Param1;
}
...
public double Param20
{
return ParentStudentProfile.Param20;
}
}
現在,整個代碼庫,有不同的情況下,我想取,
x.PredictedEQScore, x.PredictedIQScore, x.param1,x.param2,..... ........等等來創建各種圖表和報告。 x可以是StudentProfile或StudentProfileEvaluation。
在當前的設置中,每當我生成新的圖形/報告時,我都必須執行下面的操作。
public void GenerateReport1(StudentProfile studentProfile)
{
return studentProfile.PredictedEQScore.ToString() + studentProfile.Param1.ToString() +........
}
public void GenerateReport1(StudentProfileEvaluation studentProfile)
{
return studentProfile.PredictedEQScore.ToString() + studentProfile.Param1.ToString() +........
}
所以,雖然StudentProfile和StudentProfileEvaluation具有「有」的關係,我想抽象出來爲「是」的報告目的的關係。
什麼是良好的設計來建立這樣的?
這個想法,*爲-A * VS *有-A *應在有關繼承任何面向對象的語言教的第一件事。 – 2014-09-02 22:31:20
@ErikPhilips多數民衆贊成在學習OOP概念時,我被教導的第一件事...猜猜他們做了正確的事情:) – BradleyDotNET 2014-09-02 22:34:22
@BradleyDotNET那麼你有一個很好的教練。有時候教師會被包裝在如何而不是爲什麼。 – 2014-09-02 22:35:28