Что методы wikis используют для слияния параллельных редактирований?

Для наиболее читаемого кода определите функцию расширения следующим образом:

private fun <T> Single<Response<T>>.decorateWithErrorHandling(): Single<T> {
    return this
            .onErrorResumeNext { throwable ->
                // Map network layer exceptions, e.g. IOException to your specific "domain level" exceptions
                Single.error(mapNetworkErrorToSpecificThrowable(throwable))
            }
            .flatMap { response ->
                if (response.isSuccessful) {
                    Single.just(response.body())
                } else {
                    Single.error(convertToSpecificThrowable(response))
                }
            }
}

Используйте ее следующим образом:

apiCall1()
    .composeWithErrorHandling().flatMap { result1 -> apiCall2(result1) }
    .composeWithErrorHandling().flatMap { result2 -> apiCall3(result2) }

и т. Д.

7
задан Sam Hasler 22 October 2008 в 09:16
поделиться

7 ответов

TWiki автоматически объединяет Одновременные Редактирования.

TWiki позволяет несколько одновременных редактирований той же темы и затем объединяет различные изменения автоматически. Вы, вероятно, даже не заметите этот случай, если не будет конфликт, который не может быть объединен автоматически. В этом случае можно видеть, что TWiki вставляет "метки изменения" в текст для выделения конфликтов между редактированиями и другой человек. Эти метки изменения только используются, если Вы редактируете ту же часть темы как кто-то еще, и они указывают на то, на что раньше был похож текст, чем редактирования другого человека были, и каковы Ваши редактирования были.

TWiki предупредит, при попытке отредактировать тему, которую кто-то еще редактирует. Это также предупредит, если слияние требовалось во время сохранения.

Была также некоторая документация от той функции, разрабатываемой, детализируя, как она будет вести себя.

Основные принципы, которые я использовал в кодировании mergeing алгоритма, были:

  1. Если возможно объединиться, не используя маркеры конфликта, сделайте так.
  2. Если возможно объединить маркеры конфликта использования, сделайте так.
  3. Если не возможно объединиться, то новая регистрация побеждает.

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

  1. Пользователь тема редактирований
  2. Пользователь A сохраняет версию N
  3. Пользователь B редактирует тему, берет версию N
  4. Пользователь тема редактирований снова, берет версию N
  5. Пользователь A сохраняет изменения; сохраните видит, что изменение в ReplceIfEditiedWithin? окно, не увеличивает число версии
  6. Пользователь B сохраняет, код видит, что число версии на диске не изменилось, так как они начали редактировать, так не обнаруживает потребность объединиться.

Также стоящий замечания то, что TWiki предупредит второго пользователя, что тема редактируется:

Таким образом, я изобрел понятие "арендных договоров". Когда тема редактируется, арендный договор взят по теме в течение установленного промежутка времени (значение по умолчанию 1 ч). Если кто-то еще пытается отредактировать, им говорят, что уже существует арендный договор о теме, но это не мешает им редактировать. Это не блокировка, это - просто способ советовать им. Mergeing является все еще главным механизмом разрешения; арендный договор является чисто консультативным. Если пользователь - или плагин - принимает решение отступить от темы, потому что у кого-то есть арендный договор о нем, ну, в общем, это до плагина.

Описательный комментарий в TWiki.cfg следующие:

   # When a topic is edited, the user takes a "lease" on that topic.
   # If another user tries to also edit the topic while the lease
   # is still active, they will get a warning. The warning text will
   # be different depending on whether the lease has "expired" or
   # not i.e. if it was taken out more than LeaseLength seconds ago.

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

3
ответ дан 7 December 2019 в 12:26
поделиться

Мой опыт с большей частью программного обеспечения Wiki (например, MediaWiki) состоит в том, что это отслеживает версию документа, который Вы редактируете. Если изменения документа в течение Вашего времени, редактируя, Ваше изменение отклоняется, и Вам предлагают выполнить ручное слияние.

2
ответ дан 7 December 2019 в 12:26
поделиться

Можно записать "блокировку" в другой таблице базы данных с идентификатором пользователя и время и удалить "блокировку" (который не является реальной блокировкой для тех, кто не понимает), когда человек сохраняет или после x минута.

Таким образом, когда кто-то пытается отредактировать и кто-то, уже делая его. Сообщение может появиться со временем, оставаясь ИЛИ просто говоря, что кто-то еще в настоящее время редактирует сообщение.

0
ответ дан 7 December 2019 в 12:26
поделиться

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

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

0
ответ дан 7 December 2019 в 12:26
поделиться

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

0
ответ дан 7 December 2019 в 12:26
поделиться

В исследовании TWiki отвечают, что я также споткнулся через SynchroEdit, который, кажется, стиль SubEthaEdit одновременный многопользовательский редактор на базе браузера. Похоже, что от этого, возможно, отказались около сентября 2007, но существует исходный код доступный для скачивания.

0
ответ дан 7 December 2019 в 12:26
поделиться

Для пользы документации: DokuWiki помещает 15, минуты соединяют отредактированные страницы, который возобновляется каждый раз, когда Вы предварительно просматриваете свои редактирования (т.е. 15 минут от Вашего предварительного просмотра или редактирования запускаются).

0
ответ дан 7 December 2019 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: