Задать вопрос
NikolayAlb
@NikolayAlb

Создать 2 связанных модели или одну в зависимости от определенных условий, как реализовать?

Здравствуйте. Не могу понять, как лучше решить данную задачу.
Есть две таблицы:
  • Comments (task_id, text, position_x, position_y)
  • Tasks (title, priority, type, description)


Мне нужно дать пользователям возможность совершать подобные действия:
  • Создавать задачу(Task) отдельно
  • Создавать комментарий отдельно (он привязывается к картинке по координатам)
  • Создавать комментарий КАК задачу


По сути мне нужно дать возможность грубо говоря привязывать задачу к координатам. Каким образом это лучше отобразить в коде? Думал насчет декоратора, но нормального решения придумать не смог.
  • Вопрос задан
  • 796 просмотров
Подписаться 1 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 2
avtel
@avtel
Junior Java Developer
interface Task{}
interface Comment{}
class TaskImpl  implements Task{}
class CommentImpl extends TaskImpl implements Task, Comment {}
class Service {
Task newTask {return new TaskImpl();}
Comment newComment(long taskId){return new CommentImpl(taskId);}
<T extends Z&X> commentAsTask(long taskId){return new CommentImpl(taskId);}
}

что-то типа того?
Ответ написан
@u_elnur
Веб разработчик, Начинающий предприниматель
NikolayAlb: Лично я считаю, что задача должна быть независимой от коммента или координаты картинки.
Поэтому, предлагаю следующий вариант структуры БД:

Task:
    id
    title
    related_task_id
Image:
    id
    task_id
    path_to_file
    position_x = null
    position_y = null
    width = null
    length = null    
ImageComment:
    id
    image_id
    text
    position_x
    position_y
    width
    height


= null - Означает, что он по умолчанию пустой

Теперь попробую объяснить логику:
Как вы видите. задача - независимая сущность. Но задачу можно связывать к другой задачу. Объясню это чуть ниже.

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

К картинке можно писать комменты. Текст коммента, координаты x, y, ширина и высота. Думаю все понятно.

Теперь внимание. У вас есть два варианта создания задачи. Первое, это когда вы создаете его отдельно.
Второе, когда создаете задачу относящуюся к определенной области картинки (картинка в другой задаче).

С первым вариантом все стандартно.
Во втором варианте, Вам нужно будет создать отдельную задачу, и в related_task указать, внутри какой задачи создаете эту задачу.
Так же, вам нужно будет скопировать картинку, которую выделили, во вновь созданную задачу. И в дополнительных полях указать выделенную область.
Когда люди будут открывать эту новую задачу, и эту картинку, Вам нужно выделить область согласно параметрам.

Думаю, вы поняли...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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