@kofon
Я человек

Паттерн MVP используется только в.NET?

Как я понимаю MVP основан на событиях.
View, через свои методы на события контролов (button1_Click) герерит события IView.
В Presenter есть подписка на события IView. (если ошибаюсь исправьте)

Но в некоторых языках нету как таковых событий (event) (в Java вроде нет). Как применить этот паттерн без событий?
По моему это невозможно...

P.S. Придётся использовать MVC
  • Вопрос задан
  • 2338 просмотров
Пригласить эксперта
Ответы на вопрос 3
Tiendil
@Tiendil
Разработчик ПО.
Вы составили неправильное представление о том, что такое паттерны.

Паттерн — это не конкретная реализация чего-то, а подход к организации. То, что описано в книгах — это некое обобщение опыта разработчиков. На каждом ЯП паттерны могут быть реализованы по разному. Более того, т.к. паттерн, сам по себе, — обобщение опыта, то даже на одном ЯП он может быть реализован по-разному, в зависимости от контекста, в котором он используется и конкретного программиста.

Соответственно, любой паттерн можно использовать на любом тьюринг полном ЯП.

Кстати, События — это тоже паттерн, просто в некоторых ЯП он реализован на уровне языка, в других реализуется вручную. Там где их нет, их можно реализовать самому или использовать одну из готовых библиотек.
Ответ написан
Комментировать
@mamkaololosha
Паттерн это сферический совет в вакууме о том, как решить конкретную задачу проектирования. Обычно всё сводится к "А здесь у нас что-то похожее на *имя патерна*".
Ответ написан
Комментировать
halogen
@halogen
Java developer
Вполне возможно. Используется, например, в Swing (Java) или GWT (Java). События не обязательно должны быть встроены в язык и быть в нём first-class citizen. Например, в GWT обработчик события описывается следующим образом:

public interface ILoginView {
    String getUsername();
    String getPassword();
}

public interface ILoginPresenter() {
   void onLogin();
}

public final class LoginView extends Composite implements ILoginView {
// ...
    @UiField TextBox username;
    @UiField PasswordTextBox password;
    private final ILoginPresenter loginPresenter = ...;
// ...
    @Override public String getUsername() { return username.getText(); }
    @Override public String getPassword() { return password.getText(); }
    @UiHandler("login") public void onLoginClick(ClickEvent e) { presenter.onLogin(); }
// ...
}


Аннотация @UiHandler обрабатывается фреймворком. Можно, конечно, и обойтись менее декларативным подходом и регистрировать обработчики вручную через какой-нибудь addXXXListener(), как это делается в Swing.

View без событий тоже может существовать, когда от пользователя не требуется никакой обратной реакции: например, обычный какой-нибудь ISummaryView, который просто отображает несколько строк текста.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы