Кто-нибудь еще думает, что переменные экземпляра проблематичны в приложениях, поддерживаемых базой данных?

Мне приходит в голову, что контроль состояния в таких языках, как C#, не очень хорошо поддерживается.

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

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

Я полностью упускаю суть или в этой идее есть доля правды?

2 ответа

Решение

Если я правильно понимаю, что вы хотите: любой OR-Mapper с Lazy Loading работает таким образом. Например, я использую Genome, и там каждая сущность является чистым прокси, и у вас есть достаточно много влияния, чтобы сказать OR-Mapper, как кэшировать поля.

На самом деле существует концепция преобладания данных (как реализовано prevayler в Java), когда объекты в памяти являются единственной точкой доступа (SPA) для данных.

Кроме того, некоторые объектные базы данных (например, db4o) размывают границы между представлением объекта и представлением "store".

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

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

Другие вопросы по тегам