Найдено результатов: 3

Что такое MVP и MVC и в чем разница?

При взгляде за пределы RAD (перетаскивание и настройка) способа построения пользовательских интерфейсов, который поощряют многие инструменты, вы, вероятно , столкнетесь с тремя шаблонами проектирования, называемыми Model-View-Controller, Model-View-Presenter и Model-View-ViewModel . Мой вопрос состоит из трех частей к нему:

  1. Какие проблемы решают эти модели?
  2. Насколько они похожи?
  3. Чем они отличаются друг от друга?

design-patterns   model-view-controller   user-interface   mvp   glossary    

1946   16   16:03, 1st July, 2020


Как вы передаете сообщения/ошибки уровня обслуживания на более высокие уровни с помощью MVP?

В настоящее время я пишу приложение ASP.Net от UI вниз. Я внедряю архитектуру MVP, потому что я устал от Winforms и хотел чего-то, что имело лучшее разделение проблем.

Таким образом, с MVP презентатор обрабатывает события, вызванные представлением. Вот некоторый код, который у меня есть, чтобы иметь дело с созданием пользователей:

public class CreateMemberPresenter
{
    private ICreateMemberView view;
    private IMemberTasks tasks;

    public CreateMemberPresenter(ICreateMemberView view) 
        : this(view, new StubMemberTasks())
    {
    }

    public CreateMemberPresenter(ICreateMemberView view, IMemberTasks tasks)
    {
        this.view = view;
        this.tasks = tasks;

        HookupEventHandlersTo(view);
    }

    private void HookupEventHandlersTo(ICreateMemberView view)
    {
        view.CreateMember += delegate { CreateMember(); };
    }

    private void CreateMember()
    {
        if (!view.IsValid)
            return;

        try
        {
            int newUserId;
            tasks.CreateMember(view.NewMember, out newUserId);
            view.NewUserCode = newUserId;
            view.Notify(new NotificationDTO() { Type = NotificationType.Success });
        }
        catch(Exception e)
        {
            this.LogA().Message(string.Format("Error Creating User: {0}", e.Message));
            view.Notify(new NotificationDTO() { Type = NotificationType.Failure, Message = "There was an error creating a new member" });
        }
    }
}

У меня есть моя основная проверка формы, выполненная с использованием встроенных элементов управления проверкой .Net, но теперь мне нужно проверить, что данные достаточно удовлетворяют критериям для уровня сервиса.

Допустим, могут отображаться следующие сообщения уровня сервиса:

  • Учетная запись электронной почты уже существует (сбой)
  • Ссылка на введенного пользователя не существует (сбой)
  • Длина пароля превышает допустимую длину хранилища данных (сбой)
  • Участник создан успешно (success)

Предположим также, что на уровне сервиса будет больше правил, которые UI не может предвидеть.

В настоящее время у меня есть уровень сервиса, который бросает исключение, если все пошло не так, как планировалось. Это достаточная стратегия? Этот код пахнет для вас, ребята? Если бы я написал такой уровень сервиса, вы были бы раздражены необходимостью писать докладчиков, которые используют его таким образом? Коды возврата кажутся слишком старой школой, и bool просто недостаточно информативен.


Редактировать не по OP: слияние в последующих комментариях, которые были опубликованы в качестве ответов OP


Cheekysoft, мне нравится концепция a ServiceLayerException. У меня уже есть глобальный модуль исключений для исключений, которые я не ожидаю. Считаете ли вы, что все эти пользовательские исключения утомительны? Я думал, что ловить базовый класс исключений было немного вонючим, но не был точно уверен, как продвигаться оттуда.

tgmdbm, мне нравится умное использование выражения lambda там!


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

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

Вот как выглядит CreateUserView, когда ведущий обработал ServiceLayerException:

Create a user

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

В любом случае, я думаю, что сейчас мы выходим за рамки моего первоначального вопроса. Я поиграю с тем, что вы опубликовали, и если мне понадобится дополнительная информация, я отправлю новый вопрос.

c#   asp.net   exception   mvp   n-tier-architecture    

525   3   08:19, 15th August, 2020


Какие существуют альтернативы Model-View-Controller?

Проходя через университет и следя за развитием SO,я много слышал об архитектурном дизайне Model-View-Controller. Я случайно использовал шаблон MVC еще до того, как узнал, что это такое, и до сих пор использую его в своей повседневной работе. Из того, что я видел, это, вероятно, самый популярный шаблон, используемый сегодня. Но вот о чем я почти ничего не слышал, так это об альтернативных шаблонах, которые вы можете использовать вместо MVC. Какие существуют варианты и по каким причинам вы решили бы использовать их над MVC? Мне также интересно знать, для каких типов систем они обычно используются. Наконец, каковы плюсы и минусы, которые приходят вместе с их использованием?

model-view-controller   mvp   passive-view   architectural-patterns    

668   10   17:50, 1st August, 2020