Шаблоны управления версиями объектов - PullRequest
7 голосов
/ 20 февраля 2012

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

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

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

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

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

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

1 Ответ

1 голос
/ 18 июня 2012

Не будет ли работать что-то вроде пользовательского DataMapper?

doc = DocCatalog.get( docid, version );

Предполагая, что вы можете считать каждый объект материализацией того, что он представляет, в данный момент (во времени). Вместо того, чтобы быть объектом со свойством «version», «versioning» заботится о 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...