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     }
  • 相关阅读:
    LeetCode Missing Number (简单题)
    LeetCode Valid Anagram (简单题)
    LeetCode Single Number III (xor)
    LeetCode Best Time to Buy and Sell Stock II (简单题)
    LeetCode Move Zeroes (简单题)
    LeetCode Add Digits (规律题)
    DependencyProperty深入浅出
    SQL Server存储机制二
    WPF自定义RoutedEvent事件示例代码
    ViewModel命令ICommand对象定义
  • 原文地址:https://www.cnblogs.com/miaocunfa/p/9661540.html
Copyright © 2011-2022 走看看