Смешивание логики и графики в классе с шаблоном MVC - PullRequest
0 голосов
/ 21 декабря 2009

В настоящее время я разрабатываю приложение для построения диаграмм (для iPhone, хотя это в значительной степени не имеет значения) с использованием их шаблона MVC.

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

Для каждой статистики будет два аспекта.

1. Расчет. Функция, которая будет принимать данные и вычислять соответствующие статистические показатели.

2. Дисплей. Затем необходимо построить статистику поверх графика.

Очевидно, я хочу, чтобы код максимально соответствовал шаблону MVC, но я планирую разработать, возможно, сотни таких статистических данных.

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

Итак, мне очень хочется создать отдельный класс для каждой статистики. Но это будет означать, что в каждом классе будут смешиваться логика и графика, что вызывает неодобрение.

Есть ли какие-либо другие предложения относительно того, как их можно структурировать для повторного использования, не добавляя ненужной сложности?

EDIT

Спасибо за ответы. Наиболее полезно, но подняло больше вопросов!

MVC отлично подходит для остальной части приложения. Также как и для iPhone, я, кажется, в любом случае продвигаюсь по этому пути. Это единственная причина, по которой я рассматриваю MVC для этой статистики.

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

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

Ответы [ 2 ]

1 голос
/ 22 декабря 2009

Прежде всего, будет ли пользователь взаимодействовать со статистикой? Если нет, то вам не нужен MVC. (Контроллер в MVC занимается взаимодействием с пользователем).

Вы хотите, чтобы количество классов было минимальным, и это хорошо. Давайте рассмотрим и расчет, и отображение отдельно.

Как вы будете отображать статистику? Будут ли они, как правило, текстовыми метками или будут другие элементы графика (полосы ошибок или тому подобное)? Попробуйте выяснить, каким образом вы хотите отображать свою статистику.

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

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

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

1 голос
/ 22 декабря 2009

Зависит от того, что вы называете сложным. Большинство людей считают методы или классы, которые отвечают за множество сложных вещей, и классы или методы, которые отвечают за одну простую вещь. Это также известно как SRP Когда вы используете MVC, представление содержит логику отображения, модель содержит бизнес-логику (вычисление в вашем случае), и контроллер связывает их вместе. Вы можете использовать разные способы реализации MVC. Сложные приложения должны разделять модель предметной области и сопоставляться с моделью представления, но большинство простых приложений могут использовать одну модель.

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

...