В проекте, над которым я работаю, мы занимаемся выставлением счетов за медицинские услуги.
Каждый раз, когда государство вносит изменения в официальную форму (которую представляют наши классы данных), для обеспечения обратной совместимости с предыдущими формами мы добавляем новые свойства, но оставляем старые нетронутыми, и используем свойство версии документа. чтобы определить, какая проверка выполняется, и действия пользовательского интерфейса для ее отображения.
Это привело к раздуванию классов в течение всего срока действия проекта (почти 5 лет изменений, утвержденных государством), и просто не поддерживать старые форматы документов не вариант.
Я хотел бы попробовать создать новый класс для каждой версии документа, но даже тогда у нас будет несколько копий очень похожего (хотя и немного измененного) кода. И имена классов, такие как ProgressNoteV16, ProgressNoteV17, выглядят ужасно.
Нельзя использовать наследование, потому что это все равно приведет к той же проблеме (классы со свойствами, которые больше не нужны). Интерфейсы сделают интерфейс таким же раздутым, что не решит проблему.
Какие решения и лучшие практики используются для решения этой проблемы?