UPDATE:
Так что почти все здесь сказали мне, что мне просто нужно начать все сначала с того, как я спроектировал свои уроки (спасибо вам, ребята, за отличные ответы!). Поняв подсказку, я начал много читать о стратегии . Я хочу создать классы поведения (или классы стратегии), которые наследуются от абстрактного базового класса или классов. Класс Candidate тогда будет иметь свойства с другим абстрактным базовым классом / классами как Type
для поведения или стратегий. может быть что-то вроде этого:
public abstract class SalaryStrategy {
public abstract decimal Salary { get; set; }
public abstract decimal Min { get; set; }
public abstract decimal Mid { get; set; }
public decimal CompaRatio {
get {
if (this.Mid == 0) { return 0; }
else { return this.Salary / this.Mid; }
}
}
}
public class InternalCurrentSalaryStrategy {
public override decimal Salary { get; set; }
public override decimal Min {
get { return this.Salary * .25m; }
set { }
}
public override decimal Mid { get; set; }
}
public class Candidate {
public int Id { get; set; }
public string Name { get; set; }
public SalaryStrategy CurrentSalaryStrategy { get; set; }
}
public static void Main(string[] args) {
var internal = new Candidate();
internal.CurrentSalaryStrategy = new InternalCurrentSalaryStrategy();
var internalElp = new Candidate();
internalElp.CurrentSalaryStrategy = new InternalCurrentSalaryStrategy();
var elp = new Candidate();
// elp.CurrentSalaryStrategy can stay null cause it's not used for elps
}
Есть комментарии или предложения?
ОРИГИНАЛ Вопрос:
Я пытаюсь учиться и становиться более опытным в шаблонах и принципах проектирования. В настоящее время я работаю над дизайном для нескольких классов, которые поставили меня в тупик. Вот очень сжатая версия кода:
public class Candidate {
public int Id { get; set; }
public string Comments { get; set; }
// lots more properties and behaviors...
}
public class InternalCandidate : Candidate {
public decimal CurrentMid { get; set; }
public decimal CurrentMax {
get { return this.CurrentMin * 1.3m;
}
// lots more properties and behaviors...
}
public class EntryLevelCandidate : Candidate {
public string Gpa { get; set; }
// lots more properties and behaviors...
}
public class InternalEntryLevelCandidate /* what do I inherit here??? */ {
// needs all of the properties and behaviors of
// EntryLevelCandidate but also needs the CurrentMin and
// CurrentMax (and possibly more) in InternalCandidate
}
Класс InternalEntryLevelCandidate, в основном, является EntryLevelCandidate, но ему необходимо предоставить некоторые из реализаций InternalCandidate. Я говорю реализации, потому что я не хочу, чтобы реализации были разными или повторялись, иначе я бы использовал интерфейс для общих контрактов и имел бы конкретные реализации в каждом классе. Некоторые реализации свойств и поведения InternalCandidate должны быть общими или общими. Я читал о миксинах C ++ и Ruby, которые кажутся чем-то похожим на то, что я хочу сделать. Я также прочитал этот интересный пост в блоге, в котором обсуждается идея типа поведения, в котором класс мог бы наследовать несколько типов поведения, сохраняя при этом одно отношение «является»: http://www.deftflux.net/blog/post/A-good-design-for-multiple-implementation-inheritance.aspx. Это, кажется, передает то, что я хочу , Кто-нибудь может дать мне какое-то руководство о том, как я могу сделать это, используя передовые методы проектирования?