簡體   English   中英

ActionResult-服務

[英]ActionResult - Service

我很無聊,為服務和ui編寫了相同的代碼。 然后,我嘗試編寫一個用於簡單操作的轉換器。 該轉換器將Service Results轉換為MVC結果 ,對我來說似乎是一個很好的解決方案,但是無論如何,我認為這將與MVC模式相反。

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

謝謝

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);
    }
}

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM