[英]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.