我在我的MVP模式項目上有一個用戶註冊功能,也是一個問題。在MVP模式上重用代碼
用戶註冊可以在一些不同的地方進行,根據它的位置,有些字段是必需的或不是。
例如,如果用戶正在Web上註冊,則需要信用卡信息,但不需要註冊爲管理區域。
我不知道如何做到這一點,如何強加此規則。
謝謝!
我在我的MVP模式項目上有一個用戶註冊功能,也是一個問題。在MVP模式上重用代碼
用戶註冊可以在一些不同的地方進行,根據它的位置,有些字段是必需的或不是。
例如,如果用戶正在Web上註冊,則需要信用卡信息,但不需要註冊爲管理區域。
我不知道如何做到這一點,如何強加此規則。
謝謝!
正如@Adam Rackis所說,你的問題有點含糊,但我會猜測你的意思。
如果你只是想從表單刪除某些字段,只需添加一個條件,以您的觀點:
@if(!Model.inAdminArea)
{
<!-- put credit card field, etc here -->
}
根據模型的驗證設置,您可能需要修改模型來創建虛擬這些字段的條目,以便您不會收到驗證錯誤。
但是,這看起來像我簡單過分 - 爲您的問題添加一些細節。
+1,讓UI處理更改,最大限度地減少所需的後端代碼數量。 – 2011-04-20 19:17:19
首先我會在處理視圖時推薦界面隔離原則: public interface IForm EventHandler Submit; 事件EventHandler取消; }
公共接口IFormData { TDto項目{獲得;設置;} }
然後使用派生接口:
公共接口MyFormInterface:IFormData,IForm {}
然後演示者也可以僅基於場景並保持域不可知。 等...
希望這有助於!
這聽起來像你需要有多個視圖和演示者。視圖可能會遵循一些繼承鏈來獲得對視圖的重用。
// 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);
}
}
}
你將需要投入瞭解一些代碼,並讓您的問題更具體化 – 2011-04-20 17:36:33