[英]What is meant by 'Assignment Branch Condition Size too high' and how to fix it?
[英]Assignment Branch Condition is too high
我的代码是:
def send_deliverer_push_notification(order_fulfillment, parse_events)
shopper_id = order_fulfillment.shopper_id
order = Order.find_by(id: order_fulfillment_id)
user_id = order.user_id
role_name = Shopper.find_by(id: shopper_id).roles.pluck(:name).first
batch_id = Batch.find_by(shopper_id: shopper_id).id
message = "Order # #{order_fulfillment.order_id} is now ready for pick-up"
ParseHelpers.publish_batching_status(user_id, *parse_events, message) do
{
shopper_id: shopper_id,
role: role_name,
task: order_fulfillment.shopper_status,
batch_id: batch_id,
fulfillment_number: "#{order.order_number}-#{order_fulfillment.store_id}"
}
end
end
我得到Assignment Branch Condition size for send_deliverer_push_notification is too high. [16.16/15]
Assignment Branch Condition size for send_deliverer_push_notification is too high. [16.16/15]
。
我该如何解决?
从您的示例中可以清楚地看出,您不需要很多中间变量,因此也不需要赋值。 实际需要的所有参数构建代码应移至单独的方法:
def send_deliverer_push_notification(order_fulfillment, parse_events)
order = Order.find_by(id: order_fulfillment_id)
message = "Order # #{order_fulfillment.order_id} is now ready for pick-up"
ParseHelpers.publish_batching_status(order.user_id, *parse_events, message) do
batching_status_params(order, order_fulfillment)
end
end
def batching_status_params(order, order_fulfillment)
{
shopper_id: order_fulfillment.shopper_id,
role: Shopper.find_by(id: order_fulfillment.shopper_id).roles.pluck(:name).first,
task: order_fulfillment.shopper_status,
batch_id: Batch.find_by(shopper_id: order_fulfillment.shopper_id).id,
fulfillment_number: "#{order.order_number}-#{order_fulfillment.store_id}"
}
end
但最好担心代码的简洁性和可读性,而不是分数。 分数可能是发现需要注意的地方的好方法。 它绝不是代码质量的客观衡量标准。
看这个例子,它显然过于冗长,在关注点分离方面不是很好。 这一行:
role: Shopper.find_by(id: order_fulfillment.shopper_id).roles.pluck(:name).first
应该更好地表达为像这样的Shopper
方法:
class Shopper < ...
...
def self.role_of(shopper_id)
find_by(id: shopper_id).roles.pluck(:name).first
end
end
然后你可以用更具可读性的替换该行
role: Shopper.role_of(order_fulfillment.shopper_id)
可以用这条线做类似的事情:
Batch.find_by(shopper_id: order_fulfillment.shopper_id).id
该逻辑可以放在OrderFullfillment
的方法中。
遵循这种方法,您可以达到一个点,即您的代码将由更小的构建块组成,并且可以根据需要轻松组合。 这种方法还有其他好处,例如更好的可测试性和潜在的可读性。 注意不要将 go 设置为相反的程度,并使每一行都成为单独的方法。
你必须搬走
shopper_id = order_fulfillment.shopper_id
order = Order.find_by(id: order_fulfillment_id)
user_id = order.user_id
role_name = Shopper.find_by(id: shopper_id).roles.pluck(:name).first
batch_id = Batch.find_by(shopper_id: shopper_id).id
message = "Order # #{order_fulfillment.order_id} is now ready for pick-up"
分离方法甚至耦合方法并将其设置为属性
ParseHelpers.publish_batching_status
相同
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.