Об управлении представлениями при использовании Dependency Injection (шаблон MVP)? - PullRequest
0 голосов
/ 08 мая 2018

Не используя DI (Dependency Injection), я могу сам создать экземпляр View и сам определить его время жизни (каждый раз создавать новый, прежде чем показывать, или просто повторно показать его, потому что он просто скрыт).

Проблема здесь касается как DI, так и шаблона MVP. Здесь я фокусируюсь на классе Presenter . Используя DI, мы можем рассматривать IView как зависимость, используемую Presenter , и DI помогает внедрить это представление во время выполнения (через конструктор Presenter), что-то вроде этого:

public class MyPresenter {
    readonly IView _myView;
    public MyPresenter(IView view){
         _myView = view;
    }
}

Итак, как вы можете видеть, IView вводится только один раз во время инициализации MyPresenter. Это означает, что его instance следует поддерживать вместе со временем жизни MyPresenter, в противном случае мне придется заново создавать этот экземпляр IView (когда это необходимо), который побеждает от использования DI.

С экземпляром IView в порядке, но проблема может заключаться в управлении памятью. Представление может быть быстро готово, если есть какой-то запрос, показывающий его, но почти все время оно скрыто и все еще сохраняет некоторую память (в некоторых случаях может быть довольно большим, например, форма, показывающая большой список объектов ...).

Применимый в технологии Windows Forms UI, я думаю, это хорошая практика для Close формы, чтобы избавиться от нее, когда она не отображается. В этом случае это означает, что созданный экземпляр IView больше не будет использоваться. Поэтому я не могу закрыть его, а просто спрятать. Что вы думаете об этом?

Что если MyPresenter имеет много зависимостей от других IView s? Я надеюсь, что вы могли бы поделиться некоторым мнением об управлении представлениями в этом сценарии, чтобы оно могло включать правильное использование / дизайн шаблона MVP. Большое спасибо!

...