Почему так много программистов абсолютно ненавидят слои распространенности объектов?

softwareengineering.stackexchange https://softwareengineering.stackexchange.com/questions/6526

  •  16-10-2019
  •  | 
  •  

Вопрос

Распространенность-это простой метод обеспечения кислотных свойств для объектной модели в памяти, основанной на бинарной сериализации и регистрации записи. Это работает так:

  • Начните с снижения. Сериализуйте объектную модель и напишите ее в файл.
  • Создайте файл журнала. Для каждого вызова в модель объекта сериализуйте вызов и его аргументы.
  • Когда журнал становится слишком большим, вы закрываете, или в противном случае это удобно, выполните контрольную точку: напишите новый снимок и укорените журнал.
  • Чтобы отказаться или восстановиться после удара с аварией или питания, загрузите последний снимок и повторно предъяжите все вызовы, записанные в журнале.

Меры предосторожности, необходимые для выполнения этой работы:

  • Не позволяйте ссылкам на изменение объекта избежать или ввести слой распространенности. Вам нужна какая -то схема прокси или OID, как будто вы делали RPC. (Это такая распространенная ошибка новичка, она была названа «проблема крещения'.)
  • Вся логика, достигаемая от вызова, должна быть полностью детерминированной и не должна выполнять вызовы ввода-вывода или ОС, мадрящие в бизнес-логике. Написание в диагностическом журнале, вероятно, в порядке, но, как правило, получить системное время или запуск асинхронного делегата. Это так, что журнал повторяет идентично, даже если он восстановлен на другой машине или в другое время. (Большая часть кода распространенности обеспечивает альтернативный временной вызов, чтобы получить временную метку транзакции.)
  • Согласность писателя вводит двусмысленность в интерпретации журнала, поэтому она запрещена.

Это потому, что ...

  • Люди построили для них плохой вкус после попытки использовать один на проекте, который не подходил* к этому?
  • Клаус Вуэстефельд строгая пропаганда выключил людей?
  • Людям, которым нравится императивная модель программирования не нравится отделение ввода/вывода от расчета, предпочитаете вместо этого переоценить вычисления с вводами и вызовами потока?
  • Слои распространенности настолько концептуально просты и настолько тесно связаны с характеристиками рамки, в которой они обитают, что они обычно поднимаются для проекта, что делает их слишком чуждыми/нестандартными/рискованными?
  • Слишком сложно сохранить прямо, что вы должны быть осторожны, чтобы не делать?
  • Головы новичков, кажется, просто взорвутся, когда сталкиваются с чем-то, что не является таким же двухуровневым приложением, основанным на базе данных, которое они научились писать в школе? ;)

*А Весь набор данных подходит в ОЗУ, Вам не нужна параллелизм писателей, и вам не нужно делать специальные запросы, отчетность или экспортировать в хранилище данных. С извинениями перед SQLite распространенность является улучшением для спасбросков, а не заменой Oracle.

Это было полезно?

Решение

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

Другая часть заключается в том, что он очень похож на некоторые из более болезненных кусочков хранения пользовательских данных, которые вы использовали, чтобы найти много 10 с лишним лет назад, и имеет некоторые из тех же ловушек (например, партия, обновленная Btraive), которая вводит в ваш «Слишком индивидуальная» точка, но также затрудняет поиск частей полки, которые вежливо работают с ним.

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

Другие советы

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

Ответ на вопрос заключается в том, что, хотя теория проста, практика не является.

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

Любой монитор транзакций, такой как CICS, TUXEDO, WebLogic, WebSphere, JBoss или .net, предоставит все эти объекты чистым и протестированным образом. И любая база данных обеспечит «достаточно» транзакционной/настойчивости для большинства приложений.

В основном это случай этого колеса был изобретен и усовершенствован давным -давно.

Предварительные условия звучат немного обременительными для кодирования, особенно с тем, что большинство систем не нуждаются в соблюдении кислоты при запуске в памяти. Накладные расходы тоже звучат немного неприятны - там есть много отслеживания состояний.

Лицензировано под: CC-BY-SA с атрибуция
scroll top