这种情况每隔一段时间就会发生在我身上,我总是以同样的方式解决它,然后希望采用更清洁的方式.
SynchA(); SynchB(); UpdateLastTime();
if(synchA.Checked) { SynchA(); } if(synchB.Checked) { SynchB(); }
但是现在我只想调用一个或两个一起执行的UpdateLastTime(),因此我总是这样做:
bool synchHappened = false; if(synchA.Checked) { SynchA(); synchHappened = true; } if(synchB.Checked) { SynchB(); synchHappened = true; } if(synchHappened) { UpdateLastTime(); }
最后一步总是困扰我,因为我将这一个bool传播到三个逻辑分支.
对于我可以使用的上述逻辑/场景,是否有一些明显更好的方法?
解决方法
主要目标是 – 每次逻辑发生变化时 – 代码应至少受到影响.
所以你要构建一次这样的东西然后它会对你有用.
所以你要构建一次这样的东西然后它会对你有用.
在你的特定情况下,我会建议Keep It Simple(没有Strategy Pattern,依此类推),所以
提取并将开关逻辑封装到属性中.因此每次需求都会改变 – 您需要更新特定开关或主逻辑本身的逻辑.
带有封装规则的交换机:
bool IsUpdateLastTime { get { // logic here even can be fully or partially injected // as Func<bool> return this.IsSyncA || this.IsSyncB; } } bool IsSyncA { get { return synchA.Checked; } } bool IsSyncB { get { return synchB.Checked; } }
主要逻辑:
if (this.IsUpdateLastTime) { this.UpdateLastTime(); }