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