亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何減少冗余代碼,創建通用方法?

如何減少冗余代碼,創建通用方法?

C#
守著星空守著你 2023-07-09 14:56:52
我有一個插入和更新實體的代碼,但邏輯非常相似:實例一個控制器,驗證請求,如果錯誤,返回失敗,否則執行操作。        /// <summary>        /// Method Add with similar code in Update method        /// </summary>        /// <param name="item"></param>        /// <returns></returns>        public PersonResponse Add(PersonInsertRequest item)        {            var result = new PersonResponse();            var controller = new PersonController(classmates);            result.Messages = controller.ValidateInsert(item);            if (result.Messages != null && result.Messages.Any())            {                result.Status = "failed";            }            else            {                result = controller.ExecuteInsert(item);            }            return result;        }        /// <summary>        /// Method Update with similar code in Add method        /// </summary>        /// <param name="item"></param>        /// <returns></returns>        public PersonResponse Update(PersonUpdateRequest item)        {            var result = new PersonResponse();            var controller = new PersonController(classmates);            result.Messages = controller.ValidateUpdate(item);            if (result.Messages != null && result.Messages.Any())            {                result.Status = "failed";            }            else            {                result = controller.ExecuteUpdate(item);            }            return result;        }- 我嘗試使用委托,但無法使用它們,因為我無法將委托分配給controller.ValidateInsert(item);public class BaseLogic    {        public delegate List<Message> Validator(BaseRequest request);        public delegate BaseResponse Executor(BaseRequest request);我想減少另一個更通用的 Add 方法和 Update 方法。
查看完整描述

2 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

using System;

using System.Collections.Generic;

using System.Linq;


class Test

{

    private object classmates;


public PersonResponse Add(PersonInsertRequest item)

{

    var controller = new PersonController(classmates);

    return ValidateAndExecute(() => controller.ValidateInsert(item),

    () => controller.ExecuteInsert(item));

}


public PersonResponse Update(PersonUpdateRequest item)

{

    var controller = new PersonController(classmates);

    return ValidateAndExecute(() => controller.ValidateUpdate(item),

    () => controller.ExecuteUpdate(item));

}


private PersonResponse ValidateAndExecute(Func<IEnumerable<string>> validator,

Func<PersonResponse> execute)

{

    var result = new PersonResponse();


    result.Messages = validator();


    if (result.Messages != null && result.Messages.Any())

    {

        result.Status = "failed";

    }

    else

    {

        result = execute();

    }


    return result;

}

}


查看完整回答
反對 回復 2023-07-09
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

通過基類中的通用方法,我可以重構我的方法


/// <summary>

        /// Method Add with similar code in Update method

        /// </summary>

        /// <param name="item"></param>

        /// <returns></returns>

        public PersonResponse Add(PersonInsertRequest item)

        {


            var controller = new PersonController(classmates);


            Validator myValidator = request => controller.ValidateInsert((PersonInsertRequest)request);

            Executor myExecutor = request => controller.ExecuteInsert((PersonInsertRequest)request);


            var result = Execute(item, myValidator, myExecutor);


            return result as PersonResponse;

        }


        /// <summary>

        /// Method Update with similar code in Add method

        /// </summary>

        /// <param name="item"></param>

        /// <returns></returns>

        public PersonResponse Update(PersonUpdateRequest item)

        {

            var controller = new PersonController(classmates);


            Validator myValidator = request => controller.ValidateUpdate((PersonUpdateRequest)request);

            Executor myExecutor = request => controller.ExecuteUpdate((PersonUpdateRequest)request);


            var result = Execute(item, myValidator, myExecutor);


            return result as PersonResponse;

        }


查看完整回答
反對 回復 2023-07-09
  • 2 回答
  • 0 關注
  • 136 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號