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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

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

0 голосов
/ 06 апреля 2011

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

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

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

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

...