0

我必须根据以下规则确定是否可以交付包裹...

  1. 如果 packageWeight > 70 且低于 100 AND
  2. 如果 destinationState 在允许状态 {MA, PA, NY, NJ, LA,....} 的特殊列表中并且
  3. contentType 是以下任何一种 {ACD, FDY, PRZ, QUO, ..... } AND
  4. CarrierName 是以下任一 {FXD, USPS....}

如果上述条件都成立,那么我们可以交付包裹

此外还有 3 个 15x16x8 可能性的标志?

避免 if else 集群的最佳方法是什么?

哈希图?还有其他建议吗?

4

3 回答 3

4

您可以在不同的功能中分解不同的条件组。为了。例如isCarrierSupported,如果运营商是 FXD、USPS 等之一,则定义一个返回 true 的函数。类似地,您可以定义多个函数等isWeightCorrect。然后在主程序中,您可以调用这些函数并获得最终结果。

这并没有避免ifs 和elses 而是巧妙地组织程序以使其更具可读性。

于 2013-09-25T04:03:23.957 回答
2

正在寻找的是一个规则引擎,然后只使用一个已经存在的引擎。

尝试从头开始创建东西并不是一个微不足道的领域。就像您不应该编写自己的缓存系统或自己的 ORM 或自己的线程框架一样。

不要犯自己的错误,它会以眼泪收场。

由于您使用的是 Java,请查看Drools。为自己和您的公司节省一大笔钱,并使用已经为您构建的东西。

于 2013-09-25T04:20:57.813 回答
1

HashMap 可以工作,或者您可以将整个标志状态转换为 11 位掩码(15-4 位、16 - 4 位、8 - 3 位,或留下更多位以供进一步增长)并使用 11 位真/假数组指数。

缺点是 - 您无论如何都必须编写相同的 if/else 逻辑来填充地图/数组或定义一个描述所有交付(或不交付)状态的常量。

PS switch/case 看起来比 if/else 这里更合适...

于 2013-09-25T04:10:09.500 回答