MVP на полусложных страницах
Я работаю над приложением.NET 3.5 с немного сложным поведением. Это для книжного инвентаря. Чтобы дать вам представление, рабочий процесс будет:
- Пользователь вводит код ISBN
- Если ISBN действителен, проверьте, существует ли он,
- Если он действителен и существует, показать детали книги и включить кнопку сохранения, если нет, показать кнопку "Добавить книгу",
- Если это не верно, покажите ошибку,
- В конце концов, пользователь нажимает "сохранить", поэтому запись должна быть сохранена.
Это четыре обязанности:
- Подтвердить ISBN,
- Проверить существование книги,
- Показать детали книги,
- Сохранить новые данные книги.
У меня вопрос: должен ли я хранить логику приложения в одной MVP-структуре или я должен разделить ее на четыре MVP-структуры, по одной для каждой ответственности?
Хранение его в одной MVP-структуре
- сделать модель более сложной
- усложнить настройку тестов (много кода для каждого теста, чтобы выбрать правильный валидатор, возвращенную книгу и т. д., даже если они не используются),
- сделать логику представления более понятной
Хранение его в отдельных MVP-структурах
- сделать модель проще,
- создать больше, но более простых тестов для каждого докладчика,
- усложнить взаимодействие между докладчиками (как я могу сообщить докладчику, что номер ISBN действителен, чтобы можно было показать детали книги?)
Я пытаюсь использовать принципы Presenter First, поэтому: - оставляйте представление тупым (чтобы не происходило никаких событий, таких как "Presenter one validated ISBN"), - оставляйте докладчиков без состояний, - сохраняйте модели простыми (достаточно)
У кого-нибудь есть идея, как лучше всего это сделать?
1 ответ
Я бы пошел с одним докладчиком, но делегировал валидацию и т. Д. Номеров ISBN службе.
Что-то вроде этого в презентаторе для обработки введенного номера ISBN:
public void IsbnEntered()
{
var isbn = view.Isbn;
if (isbnService.NumberIsValid(isbn))
{
var details = isbnService.RetrieveDetailsForIsbn(isbn);
if (details != null)
{
view.Display(details);
view.EnableSaveButton();
}
else
{
view.DisplayError("ISBN could not be found");
}
}
else
{
view.DisplayError("Invalid ISBN");
}
}
Здесь обязанности четко определены. IsbnService отвечает за обработку ISBN, представление для отображения и извлечения ввода, а Presenter управляет взаимодействием между ними.