Отдельная презентация приложения, ориентированного на пользовательский интерфейс - PullRequest
0 голосов
/ 28 июня 2010

У меня возникли проблемы с определением правильной архитектуры для такого типа приложений: это приложение для создания диаграмм, напоминающее MS Visio.Диаграммы используются для генерации данных, которые передаются в другое приложение.

При разработке приложений я всегда пытался использовать многоуровневую структуру, но теперь не могу решить, как это сделать, когда данные настолько плотнов сочетании с презентацией.Например, определенный объект на моем холсте имеет данные (X, Y), которые используются только в целях презентации, но должны храниться как данные домена.

Где я что-то не так понимаю?Я почти уверен, что смотрю на это под неправильным углом, но не могу понять правильный.

Еще раз спасибо!

ОБНОВЛЕНИЕ:

Я также знаю, что возможно В этом случае я не должен отделять пользовательский интерфейс от домена.Если это так, пожалуйста, дайте мне разумное объяснение того, когда применять разделение, а когда нет.

Ответы [ 3 ]

2 голосов
/ 11 июля 2010

В инструменте построения диаграмм положение x / y фигуры является частью данных домена (расположение фигур является частью диаграммы - вы не можете нарисовать диаграмму без нее), код, который использует эти x / yкоординаты и рисование фигуры на экране является частью уровня представления.

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

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

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

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

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

Итак, подведем итоги:

  • Все данные диаграммы являются частью модели (включая данные, используемые только в целях представления).

  • Все, что выводится на экран или обрабатывает ввод пользователя, находится на уровне представления (очевидно,).

  • Если эти два охватывают весь ваш код и данные, то у вашего приложения нет «бизнес-логики» и т. Д.Это разделение, вероятно, излишне.

  • Если у вас есть какой-либо код, который не вписывается в эти две категории, и вы думаете, что он должен быть частью модели, чем вы должны построить два отдельных уровня.

  • Если есть возможность совместного использования кода между системами, убедитесь, что общий код не смешан с кодом презентации.

  • И последнее «бонусное» замечание - если это проект, который, вероятно, будет в активной разработке в течение длительного времени с новыми функциями, добавленными в будущем, - вы, возможно, захотите разделить пользовательский интерфейс / данные в любом случае, чтобы облегчить будущую работу - выЯ должен решить, стоит ли эта будущая экономия дополнительного времени сейчас и действительно ли это разделение поможет в будущем.

1 голос
/ 07 июля 2010

Я думаю, вам нужно убедиться, что вы держите разделение «что» и «как».То, что вы отображаете, это абстракция, наборы координат, типы фигур.Как вы показываете это очень специфично.Я бы позаботился о том, чтобы модель предметной области работала исключительно с тем, что, а уровень представления уникально с тем, как.Трудно углубиться в детали, не зная больше о вашем приложении.

0 голосов
/ 28 июня 2010

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

Может быть, это немного помогает,

...