Критикуйте мое простое [закрытое] приложение MVP Winforms

Существует два значения, о которых я знаю.

Каждый приложение, кэширующееся . Это - когда, если данные не спешат заставлять от где-нибудь (например, из-за сети) или медленный вычислять, то кэши приложения копия данных (так, чтобы это не должно было получать его снова или повторно вычислять: это уже кэшируется). Реализация кэша берет немного дополнительного прикладного программного обеспечения (логика для использования кэша) и дополнительная память (в котором можно сохранить кэшированные данные).

Это "кэширует" быть используемым, поскольку Вы заключаете в кавычки здесь:

От контекста я могу получить смысл его, чтобы сохранить часто полученное значение в оперативную память и иметь quicklook доступ к нему.

Другой ЦП, кэширующийся , который описан в эта статья Wikipedia. Кэширование ЦП происходит автоматически. Если Вы делаете большое чтение из небольшого объема памяти, то ЦП может сделать большинство тех чтений от своего кэша. OTOH, если Вы читаете из большого объема памяти, он не может все поместиться в кэш, и ЦП должен провести больше времени, работая с более медленной памятью.

Это "кэширует" быть используемым, поскольку Вы заключаете в кавычки здесь:

, Когда кто-то говорит, что они нашли часть кода, который повредит кэширование и после того, как они зафиксировали его, это улучшило скорость их приложения, о чем они говорят?

Это означает, что они нашли способ перестроить их код для порождения меньше Неудачные обращения в кэш .

Что касается [1 115] база данных, кэширующаяся , я не знаю.

13
задан Spooky 20 June 2015 в 18:19
поделиться

3 ответа

Единственный способ Чтобы приблизиться к идеальному шаблону пассивного представления MVP, нужно было бы написать свои собственные триады MVP для диалогов вместо использования диалогов WinForms. Затем вы можете переместить логику создания диалогов из представления в ведущего.

Это входит в тему связи между триадами mvp, тему, которая обычно игнорируется при изучении этого шаблона. Мне удалось соединить триады на их презентаторах.

public class PersistenceStatePresenter
{
    ...
    public Save
    {
        string sFilename;

        if (_model.Filename == _model.DefaultName || _model.Filename == null)
        {
            var openDialogPresenter = new OpenDialogPresenter();
            openDialogPresenter.Show();
            if(!openDialogPresenter.Cancel)
            {
                return; // user canceled the save request.
            }
            else
                sFilename = openDialogPresenter.FileName;

        ...

Метод Show () , конечно, отвечает за отображение не упомянутого OpenDialogView , который будет принимать вводимые пользователем данные и передавать их OpenDialogPresenter . В любом слючае, должно стать ясно, что докладчик - искусный посредник. В других обстоятельствах у вас может возникнуть соблазн провести рефакторинг посредника, но здесь это сделано намеренно, чтобы:

  • Не допускать попадания логики в представление, где его труднее проверить
  • Избегать прямых зависимостей между представлением и моделью

] Иногда я также видел модель, используемую для триадного общения MVP. Преимущество этого в том, что ведущим не нужно знать друг друга. Обычно это достигается путем установки состояния в модели, которое запускает событие, которое затем прослушивает другой докладчик. Интересная идея. Один я не использовал лично.

Вот несколько ссылок на некоторые из техник, которые другие использовали для работы с триадным общением:

5
ответ дан 2 December 2019 в 01:41
поделиться

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

ИМО в любое время, когда вы имеете дело с касанием файловой системы, всегда лучше абстрагироваться от уровня, также значительно упрощает насмешку и тестирование.

2
ответ дан 2 December 2019 в 01:41
поделиться

Мне нравится избавляться от прямого общения View to Presenter. Причина в том, что представление находится на уровне пользовательского интерфейса, а докладчик - на бизнес-уровне. Мне не нравится, что мои слои обладают внутренними знаниями друг о друге, и я стараюсь максимально ограничить прямое общение. Обычно моя модель - единственное, что выходит за пределы слоев. Таким образом, ведущий манипулирует представлением через интерфейс, но представление не принимает никаких прямых действий против ведущего. Мне нравится, что Presenter может слушать и управлять моим представлением в зависимости от реакции, но я также хочу ограничить знания, которые мое представление имеет о его презентаторе.

Я бы добавил несколько событий в свой IPersistenceStateView:

event EventHandler Save;
event EventHandler Open;
// etc.

Затем пусть мой Presenter прослушивает эти события:

public PersistenceStatePresenter(IPersistenceStateView view)
{
    _view = view;

    _view.Save += (sender, e) => this.Save();
    _view.Open += (sender, e) => this.Open();
   // etc.

   InitializeModel();
   InitializeView();
}

Затем измените реализацию представления, чтобы нажатие кнопки запускало события.

Это заставляет ведущего действовать больше как кукловод, реагируя на вид и дергая за ниточки; в нем, удалив прямые вызовы методов ведущего. Вам все равно придется создать экземпляр ведущего в представлении, но это единственная прямая работа, которую вы над ним будете выполнять.

1
ответ дан 2 December 2019 в 01:41
поделиться
Другие вопросы по тегам:

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