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 управляет взаимодействием между ними.

Другие вопросы по тегам