Что такое хорошее разделение между пользовательским интерфейсом и логикой? - PullRequest
0 голосов
/ 19 января 2011

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

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

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

  2. Пользовательский интерфейс показывает форму входа в систему, и когда пользователь вводит имя пользователя / пароль, пользовательский интерфейс отправляет их в логику для входа в систему. Если вход был успешным, пользовательский интерфейс спрашивает пользователя, что делать, если пользователь хочет показать форму, он отображает форму, если он хочет отобразить список, пользовательский интерфейс запрашивает у логики список элементов для отображения. Здесь пользовательский интерфейс имеет состояние и самостоятельно принимает решение о том, что показывать дальше. Логика используется только для предоставления информации в UI и для обработки информации, отправляемой UI. Логика не имеет состояния и выполняет только то, что говорит пользовательский интерфейс.

Мне нравится 1, потому что пользовательский интерфейс не имеет состояния, и если пользовательский интерфейс дает сбой (но не в логике, выполняемой в другом процессе), вы можете перезапустить пользовательский интерфейс и продолжить работу в том же месте до его сбоя. Это делает интерфейс очень легким и простым. Но мне интересно, что лучше: поместите состояние о том, что пользователь делает в пользовательском интерфейсе или в логике.

редактирование:

Я нашел документ , описывающий, где размещать логику, но в основном это логика и данные, а не пользовательский интерфейс. Есть ли аналогичный документ, описывающий логику и часть пользовательского интерфейса?

Ответы [ 2 ]

2 голосов
/ 19 января 2011

То, что вы ищете, это, вероятно, MVC (en.wikipedia.org/wiki/MVC), в котором говорится, что состав и отображение пользовательского интерфейса (представления) должны быть отделены от бизнес-правил, и в конечном итоге они быть отделенным от самих данных.

1 голос
/ 20 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...