1=高级返佣,2=中级返佣,3=初级返佣
D=返佣等级
Y=营业部 Z=中级 C=初级
以上是代码中的字符代表的意义
if(Y.D=3)
{
if(Z.D=3)
{
if(C.D=3)
{
}
if(C.D=2)
{
}
if(C.D=1)
{
}
}
if(Z.D=2)
{
if(C.D=3)
{
}
if(C.D=2)
{
}
if(C.D=1)
{
}
}
if(Z.D=1)
{
if(C.D=3)
{
}
if(C.D=2)
{
}
if(C.D=1)
{
}
}
}
if(Y.D=2)
{
if(Z.D=3)
{
if(C.D=3)
{
}
if(C.D=2)
{
}
if(C.D=1)
{
}
}
if(Z.D=2)
{
if(C.D=3)
{
}
if(C.D=2)
{
}
if(C.D=1)
{
}
}
if(Z.D=1)
{
if(C.D=3)
{
}
if(C.D=2)
{
}
if(C.D=1)
{
}
}
}
if(Y.D=1)
{
if(Z.D=3)
{
if(C.D=3)
{
}
if(C.D=2)
{
}
if(C.D=1)
{
}
}
if(Z.D=2)
{
if(C.D=3)
{
}
if(C.D=2)
{
}
if(C.D=1)
{
}
}
if(Z.D=1)
{
if(C.D=3)
{
}
if(C.D=2)
{
}
if(C.D=1)
{
}
}
}
不管是什么都行,最重要是让它的效率更好更快,因为数据量比较庞大
字典+委托,和冒泡没半毛钱关系。
我也刚搞开发没多久,好多东西都不会
@我敲代码我腿长:
先说你最外层的if判断,就3个值,3个值分别对应不同的分支逻辑(委托)
那么可以很容易转成Dictionary<int,Action>(考虑效率的情况下这里换成List做遍历也成,后面为了简单都以dictionary为例)
这里dictionary的key就对应你的三个值,value就对应你三个分支代码。
然后再到第二层中,其实也和第一层类似,那么前面提到的Action就又变成了一个类似最外层的Dictionary的判断逻辑,依次类推最后就可以把Action描述出来了。
当然这是做法中的一种,实现上性能好但中间在组织Action时很麻烦。
还有几种方式
1. 按照你的规则做成一个表,就算是塞到datatable中都行,表中每一行对应一种完整的分支的取值,最后加一列就是最内层if中实际的实现,使用的时候直接使用datatable的Select即可,找到对应的行后取最后加的那一列的委托执行下就可以了。这种实现也比较简单,较最前提到的方法更直观,但实现具有很强的片面性,如果逻辑变动的话这块是不太稳定的。
2.按照最初级的面相对象方式来实现,加上几个工厂最后返回创建出来的产品(最内层执行的逻辑),这种实现写的比较啰嗦,而且不好组织,写的不好的话也容易不稳定甚至有遗漏,但可读性较好,出现什么问题定位快。
3.简单的重构。你不是认为这块太丑太长么?那就把长的变短的,分支分治,最后外边套个大的if或者switch搞定。实现快,逻辑清晰,虽然有代码洁癖的可能还是会嗤鼻,但从宏观效果上看绝对碾压其他所有的方式,而且技术债务不会升高多少,以后有逻辑变动也是部分改动,实在不行了推掉重来也轻松。
百度下多态。。
if((Y.D<<2 | Z.D<<1 | C.D)=XXX)
{}
else if((Y.D<<2 | Z.D<<1 | C.D)=YYY)
{}
一共9中情况
hashmap->{ key,action};由yzc构成key即可;
简单干净高效;
用类当然更漂亮,不过效率没那么高——面向对象思维;
public void check(T t) {
if(t.t == null) {
return;
}
switch(t.t) {
case d:
//code
break;
}
check(t);
}
三元表达式可以玩下
字典,扩展性好