2016-07-26 9 views
1

私はClean ArchitectureVIPERで遊んでいます。クリーンアーキテクチャ:サーバ上のインタラクタロジック

昨日、友人はInteractorロジックをサーバーに配置し、生データを送信してInteractorで処理するのではなく、処理したデータをiOSクライアントに同期させるのはどうかと尋ねました。これは、自由にロジックを変更でき、複数のクライアント(たとえば、iOSやAndroidなど)で複製するコードが少なくて済むなど、多くのメリットがあります。

例として、 Profileと、Postのリスト。各投稿には画像とプロフィールIDがあります。

そして、すべての投稿の画像を含むテーブルビューを表示する画面を希望し、ユーザーが投稿をタップすると、それぞれのプロフィールが別の画面に表示されるとします。プロフィールでは、そのプロフィールによって投稿された名前とすべての画像が表示されます。

私たちは、クライアント上でロジックを残す場合は、我々はこのようなデータを同期することだろう。

{ 
    profiles: [ 
     { 
      id: "...", 
      name: "..." 
     }, 
     ... 
    ], 
    posts: [ 
     { 
      profileID: "...", 
      imageURL: "..." 
     } 
    ] 
} 

その後、我々はただ、すべての記事のためにデータを返すShowPostsInteractorShowProfileInteractorを持っているだろう、その第二の代替を同期、その場合には、サーバー上でこのロジックを残すことである

{ 
    name: "...", 
    imageURLs: ["...", ...] 
} 

:それは次のようにビューにいくつかのデータを返す、そのプロファイルからわずか投稿をつかむためにポストのデータをフィルタリングしますデータは:

{ 
    profiles: [ 
     { 
      id: "...", 
      name: "...", 
      imageURLs: ["...", ...] 
     }, 
     ... 
    ], 
    posts: [ 
     { 
      profileID: "...", 
      imageURL: "..." 
     } 
    ] 
} 

profilesimageURLsの追加に注意してください)

そして、それはビューにあるとして、それはもう投稿をフィルタリングする必要がないので、ShowProfileInteractorだけ(これはだった、プロファイルデータを渡しますサーバーによって行われます)。

確かに、2番目の方法では一部のデータが複製されますが、それは単なる文字列なので、これはあまり関係ありません。

私は最初のアプローチがより頻繁に行われるのを見ました。だから私の質問は、なぜ私は2番目のアプローチ(サーバー上でできるだけ多くのロジックを残して)とクライアントからすべてのインタラクタを削除して、コントローラに直接アクセスするようにします?

答えて

1

私は間違っているかもしれませんが、クリーンアーキテクチャーはモバイルアプリまたはSPAアプリを念頭に置いて設計されたとは思いません。私はいつも、サーバー側のインタラクターを中心とした、昔ながらのウェブアプリケーション中心のものとして見てきました。

根拠は、アーキテクチャは、UIの

独立でなければならないことです。 UIはシステムの残りの部分を変更することなく簡単に変更できます。 ウェブUIは、IMO、その目標は、敗北クライアント側に相互作用をプッシュビジネスルールに

を変更せずに、 例えば、コンソールUIで置き換えることができます。

+0

私は与えた2番目の例を実装しますか?また、モバイル用のクリーンアーキテクチャについては、VIPER(https://www.objc.io/issues/13-architecture/viper/) –

+0

を参照してください。そうすれば、サーバーを別のデータストアとして扱っているようです。それは一種の意味があります。私はまだ100%がクリーンアーキテクチャがモバイルに適していると確信していません。 VIPERに記述されているように、同じインタラクタをiOSアプリケーションやコンソールアプリケーションで使用することはできますが、UIを別のものに置き換えることとまったく同じではありません。一般的に言えば、WebアプリケーションのIMOよりもモバイルでのアーキテクチャ上の決定を遅らせることができます。 – guillaume31

+0

あなたの質問に関しては、特にモバイルプラットフォームの追加を計画している場合は、「はい」と言います。インタラクターを複数のクライアント言語で記述することで、メンテナンス性が低下します。しかし、サーバ対クライアントでどれくらいの処理をしたいのかは、この方程式の重要な部分です。 VIPERがインタラクターをサーバー側に動かすのに役立つかどうかはわかりません。 – guillaume31

関連する問題