2011-04-20 26 views
0

我在我的MVP模式項目上有一個用戶註冊功能,也是一個問題。在MVP模式上重用代碼

用戶註冊可以在一些不同的地方進行,根據它的位置,有些字段是必需的或不是。

例如,如果用戶正在Web上註冊,則需要信用卡信息,但不需要註冊爲管理區域。

我不知道如何做到這一點,如何強加此規則。

謝謝!

+0

你將需要投入瞭解一些代碼,並讓您的問題更具體化 – 2011-04-20 17:36:33

回答

1

正如@Adam Rackis所說,你的問題有點含糊,但我會猜測你的意思。

如果你只是想從表單刪除某些字段,只需添加一個條件,以您的觀點:

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

根據模型的驗證設置,您可能需要修改模型來創建虛擬這些字段的條目,以便您不會收到驗證錯誤。

但是,這看起來像我簡單過分 - 爲您的問題添加一些細節。

+0

+1,讓UI處理更改,最大限度地減少所需的後端代碼數量。 – 2011-04-20 19:17:19

0

首先我會在處理視圖時推薦界面隔離原則: public interface IForm EventHandler Submit; 事件EventHandler取消; }

公共接口IFormData { TDto項目{獲得;設置;} }

然後使用派生接口:

公共接口MyFormInterface:IFormData,IForm {}

然後演示者也可以僅基於場景並保持域不可知。 等...

希望這有助於!

0

這聽起來像你需要有多個視圖和演示者。視圖可能會遵循一些繼承鏈來獲得對視圖的重用。

// 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; }  
} 

然後你需要倆主持。一個用於管理註冊和另一個自我註冊

只要你有某種形式的支持業務服務做實際的工作(創建用戶) - 那麼你可以做這樣的事情...

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); 
     } 
    } 
}