2010-05-26 57 views
1

我無聊,寫作相同服務和用戶代碼。然後我試着寫一個簡單的動作轉換器。這個轉換器,轉換服務結果MVC結果,似乎是對我來說很好的解決方案,但無論如何,我認爲這將與MVC模式相反。ActionResult - 服務

所以在這裏,我需要幫助,你對算法的看法 - 這是好還是不好?

感謝

ServiceResult - 基地:

public abstract class ServiceResult 
{ 
    public static NoPermissionResult Permission() 
    { 
     return new NoPermissionResult(); 
    } 

    public static SuccessResult Success() 
    { 
     return new SuccessResult(); 
    } 

    public static SuccessResult<T> Success<T>(T result) 
    { 
     return new SuccessResult<T>(result); 
    } 

    protected ServiceResult(ServiceResultType serviceResultType) 
    { 
     _resultType = serviceResultType; 
    } 

    private readonly ServiceResultType _resultType; 
    public ServiceResultType ResultType 
    { 
     get { return _resultType; } 
    } 
} 
public class SuccessResult<T> : ServiceResult 
{ 
    public SuccessResult(T result) 
     : base(ServiceResultType.Success) 
    { 
     _result = result; 
    } 

    private readonly T _result; 
    public T Result 
    { 
     get { return _result; } 
    } 
} 
public class SuccessResult : SuccessResult<object> 
{ 
    public SuccessResult() : this(null) { } 
    public SuccessResult(object o) : base(o) { } 
} 

服務 - 如。 ForumService:

public ServiceResult Delete(IVUser user, int id) 
{ 
    Forum forum = Repository.GetDelete(id); 
    if (!Permission.CanDelete(user, forum)) 
    { 
     return ServiceResult.Permission(); 
    } 
    Repository.Delete(forum); 
    return ServiceResult.Success(); 
} 

控制器:

public class BaseController : Controller 
{ 
    public ActionResult GetResult(ServiceResult result) 
    { 
     switch (result.ResultType) 
     { 
      case ServiceResultType.Success: 
       var successResult = (SuccessResult)result; 
       return View(successResult.Result); 
       break; 
      case ServiceResultType.NoPermission: 
       return View("Error"); 
       break; 
      default: 
       return View(); 
       break; 
     } 
    } 
} 

[HandleError] 
public class ForumsController : BaseController 
{ 
    [ValidateAntiForgeryToken] 
    [Transaction] 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Delete(int id) 
    { 
     ServiceResult result = ForumService.Delete(WebUser.Current, id); 

     /* Custom result */ 
     if (result.ResultType == ServiceResultType.Success) 
     { 
      TempData[ControllerEnums.GlobalViewDataProperty.PageMessage.ToString()] = "The forum was successfully deleted."; 
      return this.RedirectToAction(ec => Index()); 
     } 
     /* Custom result */ 

     /* Execute Permission result etc. */ 
     TempData[ControllerEnums.GlobalViewDataProperty.PageMessage.ToString()] = "A problem was encountered preventing the forum from being deleted. " + 
      "Another item likely depends on this forum."; 


     return GetResult(result); 
    } 
} 

回答

1

在我的工作中,我們使用相同的算法公司。我們認爲它是一個MVVM而不是MVC。所以我認爲這個算法很好。

我只是想知道,你如何處理重定向?您是否有重定向服務結果類型,或者您決定在控制器中重定向還是不重定向?

+0

國際海事組織,只適用於基本的事情,(例如拋出異常,沒有這樣的記錄)。其他事情應採取行動的方式照顧。 – cem 2013-09-04 20:15:53