yumemi-inc / ios-training

株式会社ゆめみ iOS研修
Apache License 2.0
306 stars 41 forks source link

IBAction の名称を、操作を意味するものに変えると良いかもしれません。 #75

Open yumemi-kumagai opened 6 months ago

yumemi-kumagai commented 6 months ago

現在は、たとえば「Close」ボタンが押されたときに、@IBAction func dismiss(_:) を呼び出すようになっています。これだと閉じる操作で行うことと強く結びすぎていて、閉じる際に追加の処理が必要になったとき、名前と反する実装になる可能性があります。

@IBAction では「Close ボタンが押された」ことを意味する名称にすると「閉じる処理」であることが明確になり、その中で必要な処理(今回なら dismiss を呼び出す)をすると読みやすいコードになりそうです。

同じようにして、天気予報の更新も UI 操作に紐づいた名称のメソッドを @IBAction で呼び出すことで、同様の効果が得られそうです。特にここは既存のテストコードで顕著で、現在は loadWeather というその名前から、天気予報を取得するテストでこの @IBAction が直接呼び出されています。

ただ、テストとしては「更新ボタンが押されたこと」をテストしたい場面ではないはずで、将来的に意図しない副作用が含まれる可能性も生みそうです。また、テストコードで Sender を渡すことが求められ、無意味な値を渡さざるを得ないところも気になります。ここをボタン操作と更新操作で明確に分けることで、テストコードでもそういった懸念材料を払拭できそうです。