Я пытаюсь создать какое-то n-уровневое приложение, и мне трудно разделить пользовательский интерфейс и логику, и мне интересно, что принадлежит пользовательскому интерфейсу, а что логике.
Например, простое приложение, которое позволяет вам войти в систему, а затем просит пользователя заполнить форму или отобразить список предыдущих форм. Я могу придумать два возможных решения:
Логика сообщает пользовательскому интерфейсу, что для входа в систему, пользовательский интерфейс запрашивает имя пользователя и пароль и отправляет его в логику. Затем логика сообщает пользовательскому интерфейсу, что ему нужно спросить пользователя, хотят ли они заполнить форму или отобразить предыдущие формы. Пользовательский интерфейс затем отправляет этот выбор логике, и логика говорит пользовательскому интерфейсу отображать форму или отображать список.
Здесь пользовательский интерфейс не имеет состояния и действительно тупой, в основном логика должна сказать пользовательскому интерфейсу, что показывать и когда показывать.
Пользовательский интерфейс показывает форму входа в систему, и когда пользователь вводит имя пользователя / пароль, пользовательский интерфейс отправляет их в логику для входа в систему. Если вход был успешным, пользовательский интерфейс спрашивает пользователя, что делать, если пользователь хочет показать форму, он отображает форму, если он хочет отобразить список, пользовательский интерфейс запрашивает у логики список элементов для отображения.
Здесь пользовательский интерфейс имеет состояние и самостоятельно принимает решение о том, что показывать дальше. Логика используется только для предоставления информации в UI и для обработки информации, отправляемой UI. Логика не имеет состояния и выполняет только то, что говорит пользовательский интерфейс.
Мне нравится 1, потому что пользовательский интерфейс не имеет состояния, и если пользовательский интерфейс дает сбой (но не в логике, выполняемой в другом процессе), вы можете перезапустить пользовательский интерфейс и продолжить работу в том же месте до его сбоя. Это делает интерфейс очень легким и простым. Но мне интересно, что лучше:
поместите состояние о том, что пользователь делает в пользовательском интерфейсе или в логике.
редактирование:
Я нашел документ , описывающий, где размещать логику, но в основном это логика и данные, а не пользовательский интерфейс. Есть ли аналогичный документ, описывающий логику и часть пользовательского интерфейса?