首页 新闻 会员 周边

if else 问题

0
悬赏园豆:10 [已解决问题] 解决于 2019-06-27 13:04

现在需要调用别人的一个接口,需要根据其返回的code字段给前端映射不同的内容,
比如code是2,7,11则给前端“A”, code是1,4,8给前端“B”,code是9则给前端等等,很多这样的code的逻辑,粗略估计有40多个判断,如果用if else会有太多。

1、想过用策略模式,但是感觉会建很多类
2、也想过建一个抽象类(包含codelist,“A”这样的属性),然后一个逻辑一个实现类,然后遍历所有的子类,判断哪个子类的codelist包含当前code,但是同样需要很多类。

不知道哪种方法好,博友有更好的意见吗?

loveseejoy的主页 loveseejoy | 初学一级 | 园豆:177
提问于:2019-06-23 13:19
< >
分享
最佳答案
0
    public enum Respon
    {
        [Code(1,3,5)]
        A,
        [Code(2,4,6)]
        B,
        [Code(8,9)]
        C
    }

    public class CodeAttribute:Attribute
    {
        public List<int> Codes { get; set; } = new List<int>();
        public CodeAttribute(params int[] codes)
        {
            Codes.AddRange(codes);
        }
    }

服务启动时,创建成字典

            Dictionary<int, string> dic = new Dictionary<int, string>();
            Type type = typeof(Respon);
            Array array = Enum.GetValues(type);
            FieldInfo[] infos = type.GetFields();
            foreach (Respon respon in array)
            {
                FieldInfo info = type.GetField(respon.ToString());
                CodeAttribute attr = info.GetCustomAttribute<CodeAttribute>();
                attr.Codes.ForEach(code =>
                {
                    string value;
                    bool haskey = dic.TryGetValue(code, out value);
                    if (haskey) return;
                    dic.Add(code, respon.ToString());
                });
            }

使用的时候就通过字典使用

收获园豆:10
海之殇 | 菜鸟二级 |园豆:500 | 2019-06-27 10:02

最后的做法和你这异曲同工之处

loveseejoy | 园豆:177 (初学一级) | 2019-06-27 13:04
其他回答(6)
0

1、如果是业务逻辑很简单的话,我建议还是直接使用if...else来实现,没必要使用设计模式;
2、如果有一定的业务逻辑,又不想建很多类的话,可以试试享元模式。但是得分清内部状态和外部状态,内部状态实现共享,将外部状态传入享元对象中,根据外部状态生成不同的对象返回。
根据你的描述,还是觉得你没必要使用设计模式!

蜗牛背着马 | 园豆:202 (菜鸟二级) | 2019-06-23 20:01
0

那就写个map 配置,然后通过接口或者抽象实现。

花飘水流兮 | 园豆:13560 (专家六级) | 2019-06-23 20:30

写代码必须“懒”,这样更清楚。让更多的活机器去干,人都干了还要机器干什么。

支持(0) 反对(0) 花飘水流兮 | 园豆:13560 (专家六级) | 2019-06-23 20:31
0

如果只是数字的话,还好,就用switch语句就好了,case比if简单多了
如果不是数字的 就可以想办法让他和数字建立联系然后再用switch,这样也简单,不过需要两边都商量好
如果是用python写就更简单了,直接将数据用字典类型一个一个对应然后查字典就行了

开心的小草 | 园豆:243 (菜鸟二级) | 2019-06-23 21:53
0

都不好,建一个字典,key是code,value是你要返回给前端的内容,这样就好了。如果非常多,可以用文件记录

会长 | 园豆:12401 (专家六级) | 2019-06-24 08:46
0

枚举或者配置,推荐枚举,配置还要在程序启动的时候读

小光 | 园豆:1766 (小虾三级) | 2019-06-24 09:46
0

不建议用if else,stwich……case,建议建一张映射表,进行配置化,从表中取code映射的值

Co~Co | 园豆:507 (小虾三级) | 2019-06-24 13:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册