簡體   English   中英

分配分支條件太高

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM