public interface IRecord
{
}
public class BirthRecord : IRecord
{
public string CityOfBirth;
public Date DateOfBirth;
public BirthRecord(string cityOfBirth, Date dateOfBirth)
{
// assign these to properties
}
}
public class CarRecord : IRecord
{
public Color Color;
public string Manufacturer;
public CarRecord(Color color, string manufacturer)
{
// assign these to properties
}
}
public interface IAccount
{
public List<IRecord> Records { get; set; }
}
public class Client
{
public void ProcessAccount(IAccount account)
{
foreach(IRecord record in account.Records)
{
if(record is CarRecord)
handleCarRecord((CarRecord)record);
else if(record is BirthRecord)
handleBirthRecord((BirthRecord)record);
}
}
}
クライアントに到達して値オブジェクトを処理したい場合、あらゆる種類の厄介な型チェックとキャストを行う必要があります。これは受け入れられるパターンですか、それともより根本的な設計ミスを犯しているのでしょうか? これは、他の OOD 原則ではないにしても、OCP に違反しているようです。代替手段はありますか?