[英]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.