Не используя 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. Большое спасибо!