私たちの多くは、確かに MVC の行を少しぼやけさせ、少量のビュー関連のコードをコントローラーに滑り込ませます。個人的にはそれでいいと思います。それは、私たちが依然として MVC パターンにほぼ従っているという事実 (そして、Cocoa クラスがビューのために大変な作業を行っているという事実) を損なうものではありません。しかし、私にとっては、ビュー関連のコードが些細なことを超えて拡張される場合、ビューをサブクラス化することを選択していることに気づきます。
宗教的に をサブクラス化する人もいるでしょうがUIView
、少し実用主義が必要だと思います。些細な量のビュー関連のコードを追加する場合、それを新しいUIView
サブクラスに抽象化することで、コードの読みやすさが向上しますか? 常にではない。しかし、この状況 (サブクラス化する必要がないのに誰かがサブクラス化する) は、反対の問題 (サブクラス化すべきなのにサブクラス化に失敗する) よりもはるかに一般的ではないと思います。
それで、あなたは尋ねました:
もちろん、同じUIViewを複数の場所で再利用したり、カスタム描画を行ったりしない限り、[UIViewのサブクラス化]を行う必要はないと思います。
drawRect
再利用とカスタム描画 (例: ) が 2 つの優れた例であることに同意します。ただし、ビューが十分に複雑であるため (確かに主観的な呼び出しです)、サブクラス化によってコードの読みやすさが向上する場合は、サブクラス化するという原則も追加します。2 つの例:
アプリにカレンダー ビューがありましたが、View Controller が扱いにくくなり、月のさまざまな日のすべてのセルを管理するなどしてUIView
いました。カレンダービューで構成されています。メインの「月」ビューだけでなく、「月」ビュー内の「日」ビューもサブクラス化しました。再利用自体はありません。カスタム描画はありません。しかし、それは明らかに正しいことでした。コードははるかに読みやすくなっています。
UITableViewCell
テーブルビューのサブクラス化を増やしています。私の最初のプロジェクトではcellForRowAtIndexPath
、そのセルの複雑な構成とレイアウトをすべてテーブル ビュー コントローラーに任せていました。UITableViewCell
標準のセル型のいずれかを使用していない状況では定期的に をサブクラス化するようになったので、私のコードははるかに簡単に理解できるようになりました。
要するに、UIView
View Controller ごとに a をサブクラス化することを強制されるべきではないことに同意しますが、個人的には、ビューが特定のレベルの複雑さに達したときにそうしようとします。私は、コードの読みやすさが私の慣行を支配するようにしています。以前よりもビューをサブクラス化していることがわかりましたが、常にそうしているわけではありません。
結論として、常にビューをサブクラス化する必要はありませんが、多くの開発者はビュー (またはモデル) をサブクラス化する必要があるときにサブクラス化を怠っているという罪を犯していると個人的には思います。MVC に準拠したいという熱狂的な願望からそうすべきではありませんが、ビューまたはモデルを適切にサブクラス化した場合、コードが読みやすく維持しやすくなるかどうかを自問する必要があります。