zoukankan      html  css  js  c++  java
  • 用 map 表达互斥逻辑

    在这个开发周期遇到这样一个需求:

    管理员可以给子账号配置权限,有些权限存在互斥不可同时勾选,比如

    审核员和代采、审核和采购员不可同时勾选

    之前同事实现的方式如下:

    这样每添加一个互斥关系就要遍历一次,低效且代码繁琐。

       // 审核员和代采、审核和采购员不可同时勾选
        if ([tag isEqualToString:@"审核"] && selected) {
            for (ZSRoleOptionDTO *dto in self.roleDto.roleOptions) {
                if ([dto.rolename isEqualToString:@"采购"] || [dto.rolename isEqualToString:@"代采"]) {
                    dto.isSelected = NO;
                }
            }
        }
        if ([tag isEqualToString:@"采购"]) {
            for (ZSRoleOptionDTO *dto in self.roleDto.roleOptions) {
                if ([dto.rolename isEqualToString:@"审核"] && selected) {  /// 审核和采购员不可同时勾选
                    dto.isSelected = NO;
                } else if ([dto.rolename isEqualToString:@"代采"] && !selected) { /// 取消采购默认取消代采
                    dto.isSelected = NO;
                    break;
                }
            }
        }
        /// 选择代采默认选择采购
        if ([tag isEqualToString:@"代采"] && selected) {
            for (ZSRoleOptionDTO *dto in self.roleDto.roleOptions) {
                if ([dto.rolename isEqualToString:@"采购"]) {
                    dto.isSelected = YES;
                } else if ([dto.rolename isEqualToString:@"审核"]) { /// 审核员和代采不可同时勾选
                    dto.isSelected = NO;
                }
            }
        }

    考虑到以后可能继续添加互斥关系,在此使用map保存互斥关系,

    这样每添加一种互斥关系只需要在map内增加对应的键值对就可以了,

    大大简化了逻辑,使代码更加清晰易于维护。

     1     // 审核员和代采、审核和采购员不可同时勾选
     2     // 使用 map 保存 互斥关系 ,k-v 表示 互斥
     3     NSDictionary *dict = @{
     4                            @"审核" : @"采购代采",
     5                            @"代采" : @"审核",
     6                            @"采购" : @"审核"
     7                            };
     8     
     9     NSString *mutex = [dict valueForKey:tag];
    10     
    11     if (!IsStrEmpty(mutex) && selected) {
    12         for (ZSRoleOptionDTO *dto in self.roleDto.roleOptions) {
    13             if ([mutex containsString:dto.rolename]) {
    14                 dto.isSelected = NO;
    15             }
    16         }
    17     }
  • 相关阅读:
    Java代码打成jar后 classgetClassLoadergetResource("")返回为null
    springboot-yml内list、map组合写法
    rpc-java 生成代码路径设置
    Git操作 :从一个分支cherry-pick多个commit到其他分支
    使用maven插件生成grpc所需要的Java代码
    'Failed to import pydot. You must `pip install pydot` and install graphviz
    seasonal_decompose plot figsize
    Failed to install 'TwoSampleMR' from GitHub
    prophet Building wheel for fbprophet (setup.py) ... error
    python matplotlib 绘图线条类型和颜色选择
  • 原文地址:https://www.cnblogs.com/miaocunfa/p/9661540.html
Copyright © 2011-2022 走看看