簡體   English   中英

最好的處理方式

[英]the best way to handle

我正在寫一個模塊(前端extjs 4.2.1,帶有EF的后端asp.net mvc)。 我遇到一個小問題:當用戶單擊搜索按鈕時,將顯示extjs面板,他/她可以在文本字段內填充一些空白。 提交過濾器信息后,服務器端將使用適當的C#代碼來處理它,以過濾來自mssql數據庫的某些記錄,這是我的問題:

如果用戶未在該字段中插入任​​何內容,則標准和最佳做法是忽略該字段,但是,空白文本字段的值將為”,我不能將其用作過濾字符串,例如:文本字段名為“ sex”,如果使用沒有在該字段中鍵入任何內容,則傳遞給服務器的值將為”,如果我以這種方式編寫lambda表達式:var filter = x => x.sex ==“”; 顯然它將不起作用。 您可能會說,我可以使用if-else來整理內容。 但是如果我有很多領域,使用if-else確實會浪費時間。 那么,什么是最佳做法

編寫此條件的方法有很多種,但是您所說的是一個條件,因此為其編寫代碼並不是真正的“浪費時間”。

例如,如果您有一個IEnumerable<T>並想對其進行過濾,則可以執行以下操作:

if (string.IsNullOrWhitespace(someFieldValue))
    result = result.Where(x => x.SomeField.Equals(someFieldValue));

或者,如果您要構建表達式,則可以有條件地定義表達式。 可能看起來像這樣(這完全是徒手繪制的,因此我不確定它是否可以像這樣工作,但是您知道了):

var filter = string.IsNullOrWhitespace(someFieldValue) ?
             x => true :
             x => x.SomeField.Equals(someFieldValue);

您可以在一些私有幫助器方法之后進行抽象,以使使用的代碼更干凈一些,可以重構常用的過濾器以減少重復等。但是最終,代碼所表達的邏輯是:

在特定的已知狀態下,執行一項操作。 在其他狀態下,請執行其他操作。

那是一個有條件的聲明。

可以在客戶端將請求提交到服務器之前阻止它。

在服務器端,您可以從服務層提取驗證部分。

在我的典型Spring MVC應用程序中-
1.請求到控制器。
2.控制器委托給Validator。
3.如果成功,則控制器將委派給服務層。
4.如果失敗,控制器會將用戶重定向到錯誤頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM