Шаблоны управления версиями объектов

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

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

  • Я не рассматривал такие аспекты, как поиск более одного решения
  • ищу литературу, которая дала бы мне более надежные ссылки и т. д.).

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

Итак, я поискал в Google такие шаблоны и нашел только шаблон Temporal Object. Но я не был уверен, действительно ли я этого хотел. Ребята, есть ли у вас какие-нибудь предложения по таким выкройкам?

[Self-Edit] Возможно, я плохо описал проблему. Вы можете увидеть проблему, похожую на проблему управления версиями файлов в системе контроля версий. У меня есть несколько типов объектов (хранящихся в базе данных), которые могут иметь несколько версий. В моем приложении я должен обрабатывать все эти версии, а также мне придется создавать новую версию объектов (которые в конечном итоге будут храниться в базе данных). Я с нетерпением жду своего рода цитируемого шаблона, с помощью которого я могу моделировать интерфейсы для доступа / изменения / добавления новых версий для этих объектов. Базовый интерфейс, который я мог придумать, - это IVersionedObject с такими методами, как checkout, checkin, undoCheckout и т. Д. Но это моя собственная идея наблюдения за системами управления версиями. Я не думаю, что это шаблон проектирования SW как таковой. Итак, с нетерпением жду некоторых очень хорошо задокументированных шаблонов проектирования для вышеупомянутой проблемы.


person PermanentGuest    schedule 20.02.2012    source источник
comment
проверьте этот stackoverflow.com/questions / 557570 / это может дать вам представление   -  person Amir Ismail    schedule 20.02.2012
comment
Вы можете проверить этот пост на предмет различных дизайнов. узоры   -  person Amir Ismail    schedule 20.02.2012
comment
вы упомянули Temporal Object, но на всякий случай обратите внимание, что есть статья большего размера, в которой этот шаблон из.   -  person Dave Cousineau    schedule 12.08.2016
comment
также есть более подробная версия этого шаблона   -  person Dave Cousineau    schedule 12.08.2016
comment
Отвечает ли это на ваш вопрос? Управление версиями сохраняемых объектов базы данных, как бы вы поступили?   -  person Marco Eckstein    schedule 01.11.2020


Ответы (1)


Разве что-то вроде настраиваемого DataMapper не сработает?

doc = DocCatalog.get( docid, version );

Предположим, вы можете рассматривать каждый объект как материализацию того, что он представляет в данный момент (во времени). Вместо того, чтобы быть объектом со свойством «версия», «управление версиями» заботится о datamapper / catalog / database; т.е. объект не знает о версиях, а система хранения объектов знает.

При сохранении / сохранении объекта в datamapper будет сгенерирована новая версия:

// saves doc again after changing the title (which indeed stores a new version of it)
doc.setTitle ( newTitle );
DocCatalog.save( doc );

// gets a number indicating how many versions of the document exist
i_versions = DocCatalog.getVersions( docid );

// returns second-last version of the document
doc = DocCatalog.get( docid, i_versions-1 );
person Rafa    schedule 18.06.2012