簡體   English   中英

將命令行參數傳遞給類

[英]Passing command line arguments to classes

在開發由多個類組成的大規模命令行應用程序時,這些應用程序需要使用從命令行傳遞的選項,如何構造代碼以便可以使用這些選項?

我寫這樣的代碼:

class DatabaseHandler
  def initialize(cmd_options = {})
    @cmd_options = cmd_options
  end

  def some_method
    puts @cmd_options[:cmd_parameter]
  end
end

對我來說,這似乎很乏味且不必要。 在項目的類中使用命令行選項參數的Ruby最佳實踐是什么? 幫助表示贊賞。

Ruby類就是:類。 即使是命令行應用程序,也應使用良好的OOD。 如果需要自定義行為,請使用依賴項注入或使用參數對其進行配置。 可以使用全局變量共享命令行選項,但與往常一樣,這是有代價的:陰影,增加理解類協作者的復雜性,難以找到數據源等。

我建議使用工廠方法來解析輸入,並返回正確的配置以傳遞給類。 如果您想獲得依賴注入的好例子,請觀看Sandi Metz的演講 ,她真的很了解。

命令行選項與任何其他類型的配置都沒有不同。 配置就是配置,無論它來自何處。 因此,您使用與處理其他配置相同的方式來處理它們,例如使用

例如,對於請求參數(可能是Web上下文中最類似於​​命令行參數的參數),Rails使用名為params的全局方法,該方法返回類似Hash的對象映射參數名稱到參數的方法。 因此,這將是一個整體單例的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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