Как организовать одобрение/отклонение правок от нескольких пользователей в тексте? Добрый вечер, друзья. В целом адекватно сформулировать вопрос полностью отражающий суть проблемы крайне сложно, потому постараюсь пояснить что я имею ввиду.
Если кратко то мне необходимо доработать Text_Diff (я абсолютно не привязан конкретно к данной библиотеке, просто это первое, что я нашел в сети) так, что-бы помимо сравнения двух версий имелась возможность - отображать + удалять/восстанавливать правки по пользователям + на основе этого формировать конечный документ из:
"Исходная версия текста" -> "Одобренные правки" -> "Конечная версия текста".
Например:Исходная версияЭто текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века.Одобренная правка Пользователя 1Это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. Дополнение от пользователя 1Одобренная правка Пользователя 2Это не только текст-"рыба" но и текст ракообразный, часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. Дополнение от пользователя 2Отклоненная правка Пользователя 3Это фееричный бред текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. Хрень от пользователя 3Модераторская версияЭто фееричный бред не только текст-"рыба" но и текст ракообразный, часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. Дополнение от пользователя 1Дополнение от пользователя 2Хрень от пользователя 3Итоговая версияЭто не только текст-"рыба" но и текст ракообразный, часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. Дополнение от пользователя 1Дополнение от пользователя 2Важно заметить что все правки добавляются не друг за другом а относительно исходной версии текста
Проблемы у меня возникают с построение архитектуры как таковой, так как ничего более здравого чем десятки сравнений версий текста на каждого пользователя я не придумал.
Пока мой неюзабельный набросок выглядит так:Создаем таблицу где храним текст каждой правки пользователя (текст правки каждого пользователя вычленяем сравнивая исходную версию текста и версию пользователя с правками, разницу записываем в таблицу)Создаем таблицу с общим текстом правок от всех пользователей для последующего сравнения с текстом от каждого пользователя и подсвечиванием их правок (вот тут тупик, так как мне совсем не ясно как работать с очередностью текста, ведь каждая новая правка будет вноситься относительно исходной версии документа а не друг за другом)В случае если два отдельных пользователя затрагивают один и тот же текст в документе размещаем их друг за другом (тоже пробел, гипотетически можно провести перекрёстное сравнение с предыдущей общей версией с внесенными правками от прочих пользователей, версией с правками от текущего пользователя и исходной версией для выделение повторяющихся правок, но звучит так себе)
По итогу вызовов text_diff там будет невероятно много (и даже с сравнением всего и вся проблема хронологии сохраняется), что убого как по архитектуре так и по производительности. Потому хотел бы попросить у вас помощи с поиском верного направления мысли или еще лучше со ссылкой на готовую библиотеку xD.
Спасибо всем кто дочитал до конца...
P.s и да я знаю что мне не мешало бы прочесть курс по алгоритмам, изучить виды сортировок, etc. И я обязательно этим займусь но сейчас, у меня просто нет времени. И да я так же знаю, что по хорошему я всё это должен знать, но уж извините...

21 Авг 2019 в 06:27
186 +1
0
Ответы
1

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

Один из вариантов, который можно попробовать, это использование системы управления версиями текста (Version Control System), такая как Git. В Git каждая правка от каждого пользователя фиксируется в виде коммита, а изменения могут быть объединены в виде веток (branches) для каждого пользователя. Затем с помощью слияния (merge) можно объединить изменения от разных пользователей и решить конфликты в случае несовместимости.

Также можно рассмотреть использование специализированных платформ для коллективного редактирования текста, таких как Google Docs или Microsoft Word Online, которые предоставляют возможность одновременного редактирования документа несколькими пользователями и отслеживание изменений.

Если вы хотите разработать собственную систему, то, возможно, стоит искать библиотеки или фреймворки для работы с текстом и сравнения версий, такие как DiffMatchPatch или Meld.

Надеюсь, эти рекомендации помогут вам найти подходящее решение для вашей проблемы. Удачи вам!

20 Апр в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир