我的要求是创建一个高效的版本转换器设计。让我们假设在每个版本中都进化了以下类。
//版本1
internal class PatientV1
{
public string FullName { get; set; }
public string PatientNr { get; set; }
public GenderV1 Gender { get; set; }
}
internal enum GenderV1
{
MALE,
FEMALE
}
//版本2
internal class PatientV2
{
public Name FullName { get; set; }
public string PatientNr { get; set; }
public GenderV2 Gender { get; set; }
}
internal class Name
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
}
internal enum GenderV2
{
MALE,
FEMALE,
UNKNOWN
}
//版本3
internal class PatientV3
{
public IPerson Person { get; set; }
public string PatientNr { get; set; }
}
internal interface IPerson
{
Name Name { get; set; }
GenderV3 Gender { get; set; }
}
internal class Person : IPerson
{
public Name Name { get; set; }
public GenderV3 Gender { get; set; }
}
internal enum GenderV3
{
MALE,
FEMALE,
MALE_TO_FEMALE_CONVERSION_INPROGRESS,
FEMALE_TO_CONVERSION_INPROGRESS,
UNKNOWN
}
我创建了 JsonConverter 以将一个版本反序列化为另一个版本。这增加了许多转换器组合((n-1)!),例如。
- PatientV1ToV2Converter 从版本 1 转换到版本 2
- PatientV1ToV3Converter 从版本 1 转换到版本 3
- PatientV2ToV3Converter 从版本 2 转换到版本 3
因此,我希望 PatientV1ToV3Converter 调用 PatientV1ToV2Converter 将患者从 PatientV1 带到 PatientV2,然后 PatientV1ToV3Converter 在 PatientV2 上工作以使其成为 PatientV3,而不是这个。
所有这些我都希望在应用程序目录中不存在任何旧版本的 Patient(PatientV1 和 PatientV2)。
任何设计,无论是否有旧的 dll 限制,我都可以。