Когда использовать записи против объектов - PullRequest
1 голос
/ 25 февраля 2009

Я использую Delphi, но я считаю, что этот вопрос подходит для любого объектно-ориентированного языка программирования.

Когда я должен использовать записи над объектами. Раньше я думал, что вы используете записи, когда у вас есть простое определение набора связанных данных, которые вы хотите хранить вместе, и которые не должны быть в состоянии манипулировать собой. Однако каждый раз, когда я решил, что часть данных должна быть помещена вместе с другими данными в запись, я приходил к причинам, почему это должен быть полностью унесенный объект.

  1. Почти всегда существует причина, по которой часть данных нуждается в некоторых свойствах или методах.
  2. Управление объектами (создание и уничтожение) намного, намного проще с объектами (по крайней мере, в Delphi).
  3. Использование объектов, вероятно, не дороже с точки зрения скорости и памяти, но гораздо более гибко.

Фактически, я недавно пришел к выводу, что, возможно, единственный раз, когда вы должны использовать записи над объектами в современных приложениях, это когда вы читаете двоичный файл с диска, который может быть считан непосредственно в массив записей.

Я унаследовал 10-летний проект, который широко использует записи для объектов для небольших фрагментов данных, и мне интересно, это только я или эти концепции должны быть отправлены в корзину опыта.

Обсудить.

Ответы [ 2 ]

1 голос
/ 25 февраля 2009
  1. Когда нет способов воздействовать на ваши данные, они бесполезны большую часть времени. Итак, вы здесь.

  2. Одним из самых больших различий между объектами и записями является тот факт, что записи по умолчанию в стеке и объекты в куче. Чтобы получить запись в куче, вы получаете все хлопоты, на которые вы ссылались, но когда вы можете оставить их в стеке, это намного проще, чем управлять временем жизни объектов. Но давайте посмотрим правде в глаза, для кратковременных записей мало смысла.

  3. Когда создаются экземпляры объектов, происходит нечто большее, чем просто резервирование памяти, необходимо управлять VMT, чего нет в записи. Так что выделять объекты немного дороже, чем записи, но я полагаю, что это пренебрежимо мало, когда вы не говорите о тысячах предметов.

Чтобы сделать свой выбор, вам нужно подумать, как вы будете использовать эти объекты или записи. Если вы собираетесь читать большие двоичные файлы, лучше всего использовать записи (чтение всего буфера в массив записей, возможно, преобразование их в объекты для работы). Если вы обрабатываете структурированные данные, с нашими объектами данных, генерируемыми во время выполнения, работать намного проще.

0 голосов
/ 25 февраля 2009

Если вы находитесь в ситуации, когда вы действительно имеете дело с данными, то я думаю, что это нормально, использовать записи.

Некоторые типичные сценарии:

  • Отчетность
  • Пакетные обновления
  • Привязка данных имени / значения к выпадающим спискам в ситуациях, когда создание объектов просто излишне.
  • В кэш-памяти реляционных данных
  • Выполнение операций с большими объемами данных

Однако, как вы указали, эти сценарии находятся в меньшинстве в типичном OO-приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...