如何减少冗余代码,创建通用方法?

我有一个插入和更新实体的代码,但逻辑非常相似:实例一个控制器,验证请求,如果错误,返回失败,否则执行操作。



        /// <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 方法。


守着星空守着你
浏览 67回答 2
2回答

拉莫斯之舞

using System;using System.Collections.Generic;using System.Linq;class Test{&nbsp; &nbsp; private object classmates;public PersonResponse Add(PersonInsertRequest item){&nbsp; &nbsp; var controller = new PersonController(classmates);&nbsp; &nbsp; return ValidateAndExecute(() => controller.ValidateInsert(item),&nbsp; &nbsp; () => controller.ExecuteInsert(item));}public PersonResponse Update(PersonUpdateRequest item){&nbsp; &nbsp; var controller = new PersonController(classmates);&nbsp; &nbsp; return ValidateAndExecute(() => controller.ValidateUpdate(item),&nbsp; &nbsp; () => controller.ExecuteUpdate(item));}private PersonResponse ValidateAndExecute(Func<IEnumerable<string>> validator,Func<PersonResponse> execute){&nbsp; &nbsp; var result = new PersonResponse();&nbsp; &nbsp; result.Messages = validator();&nbsp; &nbsp; if (result.Messages != null && result.Messages.Any())&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; result.Status = "failed";&nbsp; &nbsp; }&nbsp; &nbsp; else&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; result = execute();&nbsp; &nbsp; }&nbsp; &nbsp; return result;}}

杨魅力

通过基类中的通用方法,我可以重构我的方法/// <summary>&nbsp; &nbsp; &nbsp; &nbsp; /// Method Add with similar code in Update method&nbsp; &nbsp; &nbsp; &nbsp; /// </summary>&nbsp; &nbsp; &nbsp; &nbsp; /// <param name="item"></param>&nbsp; &nbsp; &nbsp; &nbsp; /// <returns></returns>&nbsp; &nbsp; &nbsp; &nbsp; public PersonResponse Add(PersonInsertRequest item)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var controller = new PersonController(classmates);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Validator myValidator = request => controller.ValidateInsert((PersonInsertRequest)request);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Executor myExecutor = request => controller.ExecuteInsert((PersonInsertRequest)request);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var result = Execute(item, myValidator, myExecutor);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return result as PersonResponse;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; /// <summary>&nbsp; &nbsp; &nbsp; &nbsp; /// Method Update with similar code in Add method&nbsp; &nbsp; &nbsp; &nbsp; /// </summary>&nbsp; &nbsp; &nbsp; &nbsp; /// <param name="item"></param>&nbsp; &nbsp; &nbsp; &nbsp; /// <returns></returns>&nbsp; &nbsp; &nbsp; &nbsp; public PersonResponse Update(PersonUpdateRequest item)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var controller = new PersonController(classmates);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Validator myValidator = request => controller.ValidateUpdate((PersonUpdateRequest)request);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Executor myExecutor = request => controller.ExecuteUpdate((PersonUpdateRequest)request);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var result = Execute(item, myValidator, myExecutor);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return result as PersonResponse;&nbsp; &nbsp; &nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP