MVP на полусложных страницах - PullRequest
4 голосов
/ 01 апреля 2009

Я работаю над приложением формы .NET 3.5 с немного сложным поведением. Это для книжного инвентаря. Чтобы дать вам представление, рабочий процесс будет:

  • Пользователь вводит код ISBN
  • Если ISBN действителен, проверьте, существует ли он,
  • Если он действителен и существует, показать сведения о книге и включить кнопку сохранения, если нет, показать кнопку «Добавить книгу»,
  • Если это неверно, показать ошибку,
  • В конце концов, пользователь нажимает «сохранить», поэтому запись должна быть сохранена.

Это четыре обязанности:

  • Подтвердить ISBN,
  • Проверка наличия книги,
  • Показать детали книги,
  • Сохранить новые данные книги.

У меня вопрос: должен ли я хранить логику приложения в одной MVP-структуре или я должен разделить ее на четыре MVP-структуры, по одной для каждой ответственности?

Хранение в одной MVP-структуре

  • сделать модель более сложной
  • сделать настройку тестов более сложной (множество кода настройки для каждого теста для выбора правильного валидатора, возвращенной книги и т. Д., Даже если они не используются),
  • делает логику представления более понятной

Хранение его в отдельных MVP-структурах

  • сделать модель проще,
  • создать больше, но более простых тестов для каждого докладчика,
  • сложность взаимодействия между докладчиками (как бы я сообщил докладчику о том, что ISBN действителен, чтобы можно было показать детали книги?)

Я пытаюсь использовать принципы Первого Ведущего, поэтому: - Держите представление немым (таким образом никакие события как "Ведущий один проверил ISBN"), - держать докладчиков без гражданства, - Держите модели простыми (достаточно)

У кого-нибудь есть идеи, как лучше всего это сделать?

1 Ответ

1 голос
/ 01 апреля 2009

Я бы пошел с одним докладчиком, но делегировал проверку и т. Д. Номеров 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 управляет взаимодействием между ними.

...