2010-05-26 3 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

. MVC가 아닌 MVVM이라고 생각합니다. 그래서이 알고리즘이 좋다고 생각합니다.

나는 리디렉션을 어떻게 처리합니까? 리디렉션 서비스 결과 유형이 있습니까? 아니면 리디렉션을 결정했거나 컨트롤러에서 리디렉션하지 않기로 결정 했습니까?

+0

IMO, 기본 사항 (예 : 예외 발생, 해당 레코드 없음). 다른 것들은 행동 방식에서주의를 기울여야합니다. – cem

관련 문제