要らんものはどんなにブラッシュアップしても要らんものは要らんもの

タイトルは別名、要らんものを無能な人(=自分)が作り、優秀な人がアドバイスしてどんなにブラッシュアップしていっても、元々が要らんものだと意味がないという悲しみ。

Ruby/RailsでのBuilder Patternを実装できたで以下のように実装していた。

@api = Api::PanelApi.builder do | panel_api |
  panel_api.id = '999'
  (略)
  panel_api.left_panel = build_panel do | panel |
    panel.priority = 'normal'
    (略)
    panel.add_link do | link |
      link.id = 'left-sample1'
      (略)
      link.add_image do | image |
        image.width = 200
        (略)
      end
    end
  end
end

で、これに関してコメントをいただいた。

K:foo= 的なのって self なしで実現できるのでしょうか? Hash で渡して存在しないキーをチェックするかくらいが現実的かなと思います。または foo 'bar' みたいに = なしにするか。

私:
def self.build_call(&block)
 label = Label.new
 block.call(label) if block_given?
 label
end
と記述すると
@label_build_call = Api::Label.build_call do | label |
 label.category = 'bg-01'
 label.text = 'new'
end
という具合にselfなしで実現できるみたいです。
>Hash で渡して存在しないキーをチェックするかくらいが現実的かなと思います。または foo 'bar' みたいに = なしにするか。
なるほど、こういうやり方もあるんですね。

K:なるほど。しかし label. がいるのだと builder pattern 適用前とタイプ量があまり変わらないような気がします...。
= なしのは、DSL 的なものでよく見ます。

私:>なるほど。しかし label. がいるのだと builder pattern 適用前とタイプ量があまり変わらないような気がします...。
selfの記述が紛らわしいので、タイプ量でどうこうという話ではない認識です。
>= なしのは、DSL 的なものでよく見ます。
実装方法がよく分からないのでー。

K:https://gist.github.com/shuhei/e48d64ed9daa3d9c6316
ためしに書いてみたけど、Hash で普通に渡すのがいいような気がしました。

私:私でどちらが良いか判断できないので、レビューで指摘してくれた方に相談させてください。

で、レビューアに相談したところ、Hash渡しでOKということになったのだが…。

  • そもそもこのModelはJSONを生成するもの
  • このModelにHash渡しする内容はほぼJSONを生成するものと変わらない
  • このModelでHash渡しされた内容のチェックをしても良いが、そもそもそれ用のツールが提供されている&JSON Schemaは結構よく変わる
  • そうすると、このModelで最低限そのツールでJSON Schemaチェックをする必要があるが、それはテストでは必要でも本通信では不要なもの
  • なら、このModelに渡そうとするHashでJSON生成して、それをツールでテストし、問題なければ設定すれば良いのでは?
  • =このModelの存在意義ゼロに、ゼロ・トゥ・ワンならぬワン・トゥ・ゼロ

レビューアの貴重な時間を浪費してしまって申し訳ないものの、経験を積めたので、不満を訴えたり文句を言うつもりは一切ない。ただ、自分はみんなのために作ったModelが実は無用の長物になった虚しさを共有したいだけなんだ…。