Я работаю над приложением RoR, но это общий вопрос стратегии для ООП. Рассмотрим случай, когда есть несколько типов ссылок, на которые вы храните данные: Книги, Статьи, Презентации, Главы книг и т. Д. Каждый тип ссылки является частью иерархии, где общие поведения находятся в самой общей точке наследования, и на уровне БД я использую однонаправленное наследование. Тип устанавливается с помощью опции выбора, поэтому давайте скажем, что я вводил данные так, как если бы это была книга, но потом понимаю, что это только глава. Поэтому я меняю тип ссылки, выбирая «Book Chapter», после чего публикует обновление существующей модели/формы. Вопрос в том, что является правильной стратегией для решения этой проблемы?Преобразование объектов в другие типы
С одной стороны, предпочтительнее преобразовать существующую запись в БД, чтобы избежать исчерпания идентификатора и потенциально сохранить операции для создания/удаления записей. Это, однако, как правило, делает стратегию обновления сложной.
С другой стороны, это похоже на общую ориентацию объекта для создания нового объекта (и записи) с использованием старого объекта для инициализации значений, которые вы хотите сохранить, а затем удалить старый объект. Это, я думаю, имеет больше смысла с точки зрения пространства объектов (кучи), и я думаю, что он более согласован с идеями, подобными идеям общих систем.
Тем не менее, я не прибил это место, и, посидев на нем некоторое время, я подаю его этому сообществу, чтобы узнать, какой «правильный» способ сделать это.
Согласен.Если ваши модели являются достаточно похожими, чтобы гарантировать однонаправленное наследование таблицы, то любой из этих вариантов будет намного более трудным, чем это действительно необходимо. –
Возможно, я должен был использовать второй пример. Речь идет не только о хранении данных, но и о том, как ведут себя данные. Другой пример - это то, где мы создаем скрипты для игры, а записи представляют собой узлы выражения. Так что давайте скажем, что у нас есть класс Effect, и есть такие вещи, как «Дать» и «Вступить», но у GiveMoneyEffects есть другие требования, чем «GiveItemEffects», которые требуют выбора элементов. В этом случае происходят изменения поведения формы, а также проблемы времени обработки. Что такое «правильная» вещь? – adamaig
@adamaig Ну, тогда правильная вещь могла бы создать новый объект с другим подклассом. Кроме того, вы можете просто иметь поле поведения, которое проверяет ваша модель. Если вы используете Ruby, вы можете использовать метапрограммирование, чтобы дать объекту свою собственную функциональность во время выполнения. Как прокомментировал @NSD, правильная вещь будет зависеть от диморфизма ваших моделей и языка/парадигмы, с которой вы решили работать. – deau