# Entaku.rb #2: レガシーコード - テストの話 - フロント - レガシーフロントエンド安全改善ガイド - https://www.amazon.co.jp/dp/B0811FYH79 - snapshotテスト - リグレッションテスト - e2e - bootstrap/js/dist入れたりしないといけなくてつらい - バックエンド - とりあえずでかいformクラスとかだとprivateからあえて書く - pythonだとdocテスト使って書いてました。 - https://docs.python.org/ja/3/library/doctest.html - rubyだと `__send__`(or `send`)を使ってprivateメソッドを実行する - db設計を変えるのは難しい - https://speakerdeck.com/toshimaru/how-to-deal-with-fat-model - Fat Controller - 古いけどまだ使えそうなパターン - https://techracho.bpsinc.jp/hachi8833/2013_11_19/14738 - ロジックをどこに切り出す? - ViewModel - https://tech.kitchhike.com/entry/2018/02/28/221159 - そもそもいつ切り出す? - 全体でコンセンサスが取れていない・時期尚早だと統一感がなくなって荒れる - Form・Service => どこまでが守備範囲? - ビジネスロジックとは・・・? - 皆認識が大概ばらばら - https://wa3.i-3-i.info/word13666.html - システムにおける実際のお仕事部分のこと - - バリデーションをモデルに持たせないみたいな話は? - ややこしいバリデーションはValidarorクラス - ActiveModel::Validator - - validate context - ある文脈でのみvalidationをかける - model#saveにcontextが渡せる - https://qiita.com/kadoppe/items/061d137e6022fa099872 - controller#createから呼んだ場合は、contextに:createが渡る - レガシーコードとは? - Ruby(のプロダクト)にはレガシーコードはある? - バージョンによって挙動が違う - ライブラリがもうメンテされていない - テストがない - 開発する上で何かしら障害があるようなコード - 可読性が低い - データを作るのが難しい - 仕様が曖昧 - リファクタリングしたいけどテストがない場合、リファクタリングするのかテストするのか - あえて臭いものにフタをする - 頑張ってテストを書く - 銀座Rails - テストがないRailsプロジェクトにテストを足す話 - https://speakerdeck.com/ginkouno/tesutoganairailspuroziekutonitesutowozu-suhua - APIの場合はrequest_specから - 普通のerbの場合はfeature_specから moduleに分けたらテストできるかも。 ただ、現実はそこまで甘くない。。。 ```ruby class God private def area(radius) radius*radius* PI end end module GodPrivateMethod def area(radius) radius*radius* PI end end class God private include GodPrivateMethod end ```