8

私はクリーンな iOS アーキテクチャ VIPER に関する多くの記事を読み、主な目的である関心の分離を理解しています。

現在、プロジェクトに使用しています。モジュールがあり、それぞれビュー、インタラクター、プレゼンター、エンティティ、およびルーター (ストーリーボード付き) で分割されています。

モジュールがあります: Address とサブモジュール Add アドレス ページの追加。

したがって、UIViewController によって実装されたプロトコル ビューがあります。ビュー コントローラは、すべての弱い IBOutlet ラベルとテキスト フィールドを保持します (新しいアドレス フォーム用)。

住所フォームには、次のようないくつかのフィールドが含まれています。

  • 人の名字
  • 郵便番号
  • 電話
  • Eメール
  • 等...

私の場合、プレゼンターは、API 呼び出しを実行するインタラクターにユーザー インタラクションを依存するだけです。

しかし、API 呼び出しを実行する前に、無駄なネットワーク リソースの消費を避けるためにフォームを事前検証したいと考えています。

たとえば、次のことを確認する必要があります。

  • 空の場合はフィールドが必須であることをビューに伝えます...
  • 電子メールの形式を変更し、フィールドが無効であることをビューに伝えます...

私の質問は、フォーム検証コードをどこに置くことができますか?

その役割を担うべき VIPER コンポーネントはどれですか?

前もって感謝します!

4

4 に答える 4

6

情報が適切な要素にカプセル化されるため、VIPER の主な利点の 1 つは関心の分離です。

Interactor は、ほとんどの検証に関する問題を含む「ビジネス ロジック」を扱います (その検証の一部は、エンティティ自体によって実行される可能性があります)。したがって、ビューはそのデータをプレゼンターに渡します。プレゼンターはそれをインタラクターに参照し、インターアクターはそのビジネス有効性をチェックし、データの一貫性についてエンティティに通知するように依頼します。

ただし、ライブラリを使用して開発を高速化すると、カプセル化と使いやすさのトレードオフを余儀なくされる可能性があります。たとえば、かなり広範な検証ルールを提供しますが、 を Validator コンポーネントSwiftValidatorに渡す必要があります。UITextField

したがって、Interactor に依存するより優れたカプセル化されたアーキテクチャ ( のようなライブラリによって強化される可能性がありますValidators) か、または のようなより MVVM 指向のツールを選択するかは、あなた次第ですSwiftValidator

于 2016-06-02T15:25:22.883 に答える
2

これはビジネスロジックに関連しているため、検証はインタラクターに行くべきだと思います。フォーム インタラクターと呼ばれるワーカーを作成することもできます - 検証が大きすぎる場合は、インタラクターがそれを行う場所です。デリゲートを使用すると、何か問題がある場合、正確には何が問題なのか、エラー メッセージなどをユーザーに通知できます。

http://clean-swift.com/clean-swift-ios-architecture/も参照します。

于 2016-06-02T13:03:59.070 に答える