Повторно использовать код в шаблоне MVP - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть функция регистрации пользователя в моем проекте шаблона MVP, а также проблема.

Регистрация пользователя может быть произведена в разных местах, и в зависимости от того, где она находится, некоторые поля являются обязательными или нет.

Например, если пользователь регистрируется в Интернете, информация о кредитной карте требуется, но не требуется, если регистрация выполняется в административной области.

Я не уверен, как это сделать, как навязать это правило.

спасибо!

Ответы [ 3 ]

1 голос
/ 20 апреля 2011

Как сказал @ Адам Рэкис, ваш вопрос немного расплывчат, но я догадываюсь, что вы имеете в виду.

Если вы просто пытаетесь удалить некоторые поля из формы, просто добавьте условное выражение в ваше представление:

@if(!Model.inAdminArea)
{
<!-- put credit card field, etc here -->
}

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

Но, похоже, я слишком упрощаю - добавлю некоторые детали к вашему вопросу.

0 голосов
/ 20 апреля 2011

Похоже, вам нужно иметь несколько просмотров и докладчиков.Представления могут следовать некоторой цепочке наследования для повторного использования в представлениях.

// Base requirements for user registration.
public interface IUserRegistrationView {
    string FirstName { get; }
    string LastName { get; }
    string EmailAddress { get; }
    string Password { get; }
}

public interface ISelfRegistrationView : IUserRegistrationView {
    string CreditCardNumber { get; }
    CardType CreditCardType { get; }
    DateTime CreditCardExpirationDate { get; }    
}

Тогда вам понадобится два докладчика .Один для Admin регистраций и другой для Самостоятельных регистраций .

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

public class AdminRegisterNewUserPresenter : BasePresenter
{
    private readonly IUserRegistrationView view = null;
    public AdminRegisterNewUserPresenter(IUserRegistrationView view) { this.view = view; }

    public void RegisterNewUser()
    {
        try 
        {
            UserBusinessService service = new UserBusinessService();
            service.AdminRegisterNewUser(this.view.FirstName, 
                this.view.LastName, this.view.EmailAddress, this.view.Password);
        } 
        catch(Exception e)
        {
            base.HandleError(e);
        }
    }
}

public class SelfRegistrationPresenter : BasePresenter
{
    private readonly ISelfRegistrationView view = null;
    public SelfRegistrationPresenter(ISelfRegistrationView view) { this.view = view; }

    public void RegisterNewUser()
    {
        try 
        {
            UserBusinessService service = new UserBusinessService();
            service.NewUserSelfRegistration(this.view.FirstName, 
                this.view.LastName, this.view.EmailAddress, this.view.Password, 
                this.view.CreditCardNumber, this.view.CreditCardType, this.view.CreditCardExpirationDate);
        } 
        catch(Exception e)
        {
            base.HandleError(e);
        }
    }
}
0 голосов
/ 20 апреля 2011

Сначала я бы порекомендовал принцип разделения интерфейса при работе с представлениями: public interface IForm {event EventHandler Submit;событие EventHandler Cancel;}

открытый интерфейс IFormData {TDto Item {get; set;}}

Затем используйте производный интерфейс:

открытый интерфейс MyFormInterface: IFormData, IForm {}

Тогда и докладчики могут основываться только на сценариях и оставаться независимыми от домена.и т.д ...

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...