由於這一個CodeReview是一整個功能的Review,有時候被批評、指正的時候(尤其是在自己能力還不夠的時候)
都會懷疑自己是不是沒有天分 因為在看他們寫的東西地當下是覺得困難的,就像你看別人把拆解一個機械的過程Show給你看,通常會覺得還是有點困難,但當你真的融入那個拆解的過程,一步一步跟著做實際做之後就會發現,這一切是好的、完整的。
也因為這樣所以我才想把這些寫下來,警惕、期望自己更進步。
首先先說 我們MVC的分層 有拆成 Controller-Service-Dal
簡單先列出,寫這個的要點是
- 在進入方法無論是讀取、寫入、修改,都需要有回傳boolean 去控制
- 需使用Debug.Assert 的檢查,讓程式在debug時能快速找出錯誤點
- Service層內如果在Dal內有誤,應對Log做寫入(NLog)
- Dal 吐出的資料,應要有準確性(前端只需要第一筆資料,不應再傳List 而是應該用FristDefault處理)
- 善用Ref , Out ...等 流程控制,使得程式達到上述要點
Controller
[Authorize]
[HttpPost]
public JsonResult GetStepList(string prjIdEncode)
{
var result = new
{
IsSuccess = stepListService.GetStepList(out StepList stepList, prjIdEncode),
Content = stepList
};
return Json(result);
}
Service
public bool GetStepList(out StepList stepLists,string prjIdEncode)
{
Debug.Assert(!string.IsNullOrWhiteSpace(prjIdEncode), "prjIdEncode不為空值");
if (!stepListDal.GetPrjStepList(out stepLists, prjIdEncode))
{
LogSet.LogError(string.Format("Invoke GetPrjStepList() error. Input: [prjId={0}]", prjId));
return false;
}
return true;
}
Dal
public bool GetPrjStepList(out StepList stepLists,string prjID)
{
//填入 sql command
//填入 parameter
stepLists = ExecuteQuery<StepList>(sqlCommand, objParam).FirstOrDefault();
return stepLists != null ? true : false;
}