2016-04-22 30 views
4

我開始在Android項目上實現MVP模式,並且在執行任何操作之前我有些疑慮應該在哪裏驗證字段。Android MVP對驗證有疑問

例如,如果我必須發送帶有三個字段(名稱,電子郵件,文本)的表單。 我應該驗證活動中的字段,還是應該將它們發送給演示者進行驗證?

如果與演示者的溝通只能通過正確的數據進行驗證,我還不能100%確定。

回答

8

這要看,我的建議是,(而我通常做):

  • 如果該字段可以驗證沒有訪問數據庫複雜的操作,我會做它活動。此類字段的示例爲:密碼(密碼至少需要包含7個字符),年齡(年齡必須爲數字)
  • 如果該字段需要通過訪問數據庫(或通過網絡服務)操作需要複雜的邏輯和資源,在演示者中進行。這些領域的例子是:用戶名(要檢查它是否是重複的用戶名通過訪問數據庫)

認爲它作爲一個前端和後端網站,雖然不完全一樣,它確實幫助你澄清混淆的概念。

+0

感謝您的建議!我會嘗試使用「前端和後端」的方法。 –

+1

雖然起初覺得在視圖層做一些次要的驗證邏輯是很誘人的,但我相信即使是這樣的邏輯也屬於表現層。在演示者層中更容易測試,並且存在明確的區別,並說明爲什麼您有兩層。如果不是完全愚蠢的話,視圖圖層保持漂亮。 –

1

你可以這樣做在活動 `private Presenter mPrensenter;

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    btn.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      mPrensenter.load(name,email,text); 
     } 
    }); 
} 

@Override 
public void onRightDataValidated(){ 

}` 

則存在兩種接口的MainView和提交人:

public interface MainView{ 
    void onRightDataValidated(); 
} 

public interface Presenter{ 
    void load(String name,String email,String text); 
} 

INT演示的IMPL,當數據需要是無效的負荷的方法,u可以使用MainView.onRightDataValidated回調,你可以在我的github中找到更多MVP Demo

0

嗯,我相信你應該在活動中進行驗證。而簡單的演示者會調用驗證方法來檢查驗證是否通過,然後它會完成操作,否則顯示錯誤。 在我的客戶的項目之一,有詳細頁面和點擊提交按鈕,它應該檢查是否填寫詳細頁面,然後它會保存訂單的細節,否則顯示錯誤。 這是我怎麼也implemented-- enter image description here

在這裏你可以看到isDetailFilledOut()是一種驗證方法,如果驗證通過,否則它false將返回true。 如果它返回true,它會檢查互聯網是否可用,然後通過調用模型的saveOrder方法保存訂單,否則顯示填寫詳細信息警告。