私はMVPパターンを使って設計されたアプリを持っています。しかし、私たちの実装のすべてがMVPのベストプラクティスに固執しているとは確信していません。この本で作業することは必ずしも可能ではありませんが、私は非ユーザインタラクションを扱うロジックがどこにあるべきかを判断しようとしています。例えばMVPと非ユーザインタラクション
:
私は垂直RecyclerViewのスクロールのオフセットを検出する必要があります。スクロールがコンテンツの高さの20%に達したら(大体)、ポップアップを表示する必要があります。今、私のロジックは(擬似コード)
1. Presenter sets View.setVerticalOffsetTriggeringLimit(1000 pixels)
2. View triggers view event and call Presenter.offsetForPopUpReached()
3. Presenter triggers View.showPopUp()
4. pop up is shown
長所と短所でしょうか?まだテスト可能なコードを持っている間にそれを改善する方法はありますか?プレゼンターをミドルレイヤーとして使用するシステム自体は「ユーザー」ですか?
私はそれについて議論することができます。プレゼンターがボタンを押した後にビューを更新することは、1000ピクセルをスクロールしてイベントをトリガーすることと変わりありません。とにかくモデルはビューから離れています。ユースケースをテストし、必ずしも人間ではないがUIの一部であるActorを持つことは、すべて同じように扱われるべきです。この種のイベントは、UIのものだけでなく、モデルともやりとりする(またはしない)イベントチェーン全体です。 – shadox
はい、私はそう思います。 'mediator'を使用してみてください - インターフェイス、抽象スクロールイベント、およびそのインプリメンテーションをRecyclerViewに渡します。これはViewに渡されます。それはテストのためのモックと取り替えることができます。 –