2016-12-04 8 views
0

私は自分のビューモデルを検証する方法について疑問に思っています。メソッドがサービスレイヤから返すもの

ユーザーはチームを1つしか所有できないため、チームに1つもない場合は何らかの形でチェックする必要があります。

public ActionResult AddTeam(TeamCreatingViewModel teamToAdd) 
    { 
     if (ModelState.IsValid) 
     { 
      //check if the user has got a team 
      if (!TeamService.checkIfUserHasCreatedTeam(User.Identity.GetUserId())) 
      { 
       //if not then allow him to create one 
       if (!TeamService.addTeam(teamToAdd, User.Identity.GetUserId())) 
       { 
        ViewBag.Info = "Success"; 
        return View("Info"); 
       } 
       else 
       { 
        ViewBag.Info = "It was impossible to create a new team"; 
        return View("Error"); 
       } 
      } 
      else 
      { 
       ViewBag.info = "You have a team!"; 
       return View("Error"); 
      } 
     } 
     else 
     { 
      return View("TeamCreatingForm", teamToAdd); 
     } 
    } 

解決方法

public ActionResult AddTeam(TeamCreatingViewModel teamToAdd) 
    { 
     if (ModelState.IsValid) 
     { 
      if (!TeamService.addTeam(teamToAdd, User.Identity.GetUserId())) //<--- now it is checking and adding (if allowed) 
      { 
       ViewBag.Info = "Success"; 
       return View("Info"); 
      } 
      else 
      { 
       ViewBag.Info = "It was impossible to create a new team"; 
       return View("Error"); 
      } 
     } 
     else 
     { 
      return View("TeamCreatingForm", teamToAdd); 
     } 
    } 

エラーが発生した場合(どのような場合)、どのように報告できますか?後者の場合、ユーザーは何が間違っていたかについて何も知らないでしょう。 最初のケースでは、エンティティオブジェクトを2回取得する必要があります。何が役に立たないようです。

答えて

0

あなたは

public bool AddItem(string name, out List<string> errors){...}// or just string with error 
+0

オクラホマ例えば、PARAMを捨てることにより、ビジネス層からエラーを報告することができます。答えをありがとう、それは良い練習ですか? – pred

+0

はい、サービスコードが複数の場所(Web + APIなど)から使用される場合。私はそれがよりエレガントだと思うし、例外をスローし、後でそれをキャッチします。 – Nigrimmist

関連する問題