Как организовать одобрение/отклонение правок от нескольких пользователей в тексте? Добрый вечер, друзья. В целом адекватно сформулировать вопрос полностью отражающий суть проблемы крайне сложно, потому постараюсь пояснить что я имею ввиду.
Если кратко то мне необходимо доработать 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
206 +1
0
Ответы
1

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

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

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

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

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

20 Апр 2024 в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир