How to avoid “too many parameters” problem in API design?

前端 未结 13 1675
别那么骄傲
别那么骄傲 2020-11-27 09:01

I have this API function:

public ResultEnum DoSomeAction(string a, string b, DateTime c, OtherEnum d, 
     string e, string f, out Guid code)
13条回答
  •  旧巷少年郎
    2020-11-27 09:51

    How about creating a builder class inside your data class. The data class will have all the setters as private and only the builder will be able to set them.

    public class DoSomeActionParameters
        {
            public string A { get; private set; }
            public string B  { get; private set; }
            public DateTime C { get; private set; }
            public OtherEnum D  { get; private set; }
            public string E  { get; private set; }
            public string F  { get; private set; }
    
            public class Builder
            {
                DoSomeActionParameters obj = new DoSomeActionParameters();
    
                public string A
                {
                    set { obj.A = value; }
                }
                public string B
                {
                    set { obj.B = value; }
                }
                public DateTime C
                {
                    set { obj.C = value; }
                }
                public OtherEnum D
                {
                    set { obj.D = value; }
                }
                public string E
                {
                    set { obj.E = value; }
                }
                public string F
                {
                    set { obj.F = value; }
                }
    
                public DoSomeActionParameters Build()
                {
                    return obj;
                }
            }
        }
    
        public class Example
        {
    
            private void DoSth()
            {
                var data = new DoSomeActionParameters.Builder()
                {
                    A = "",
                    B = "",
                    C = DateTime.Now,
                    D = testc,
                    E = "",
                    F = ""
                }.Build();
            }
        }
    

提交回复
热议问题