職業訓練を管理するためのシステムには、CourseBase抽象クラスがあります。これは、仮想の基本エンティティICourseから派生したすべてのクラスの実装コードの重複を避けたいため、インターフェイスを優先して使用することにしました。Course各コースには、科目のリストがあり、任意の科目がSubjectBase抽象クラスによって定義されています。だから、私は例えば
public abstract class CourseBase : BaseObject
{
public IEnumerable<SubjectBase> Subjects
{
get { return new List<SubjectBase>(); }
}
}
public abstract class SubjectBase
{
public string Name { get; set; }
public string Description { get; set; }
public int ValidityPeriod { get; set; }
}
LocalCourseここで、オブジェクトのコレクションを含む具象クラスを追加したいのですLocalCourseSubjectが、のインターフェイスを使用していないためCourseBase、共分散を失いSubjects、新しいもので抽象ベースのプロパティを非表示にする必要があります。
public class LocalCourse: CourseBase
{
public IEnumerable<LocalCourseSubject> Subjects
{
get { throw new NotImplementedException(); }
}
}
OOの観点から、ここで非常に明白な何かが欠けていると確信していますが、私が見ることができる唯一の解決策は次のとおりです。
- 抽象ベースからSubjectsを完全に省略し、派生クラスに特別に型指定されたコレクションプロパティのみを追加します。
ISubjectCollectionOwner抽象ベースや具象クラスなどのインターフェースを実装します。
ここでぼんやりとすみません。このようなデザインの問題に遭遇することができて久しぶりです。