Приложение написано на Ruby on Rails, но проблема, с которой я сталкиваюсь, больше связана с дизайном, чем с языком.
система обслуживает несколько пользователей для ведения реестра. Так что это относится людей к вещам. Как таковая, она имеет модель «Персона», представляющую владельцев, и модель «Пользователь», представляющая тех, кто управляет реестром.
Теперь возникло новое требование, позволяющее пользователям входить в систему и иметь возможность изменять личные данные, которые не требовались для оригинального дизайна.
Вопрос в том, как провести рефакторинг приложения, чтобы разрешить это новое требование в?
Одним из простых решений является создание пользователей для каждого человека, которые запрашивают учетные данные для входа и связывают пользователя с объектом, но это не очень СУХО, поскольку некоторые поля, такие как имя, фамилия и т. Д., Относятся к обоим классам и, в частности, именно данные люди смогут изменить. Кроме того, Пользователь и Персона хранятся в отдельных таблицах.
Другая возможность, которую я рассматривал, состоит в том, чтобы заставить одну расширять другую, но наличие данных в отдельных таблицах делает его немного беспорядочным. Кроме того, логическим расширением будет User <- Person, поскольку пользователь (как правило) - это человек, но размышлять над реализацией Person <- User намного проще. </p>
Одним из последних вариантов может быть удаление пользователя и перемещение учетных данных для входа в систему Person, оставляя поля входа пустыми для тех, кто не будет входить в систему, и половину полей пустыми для тех, кто только входит в систему.
Можете ли вы придумать лучшее решение?