it-swarm-ja.com

Webサービスで再利用可能なコンポーネント

Swiftで、ユーザーの場所に基づいて現在の天気を表示する再利用可能なコンポーネント/ Cocoa TouchFrameworkを作成しようとしています。

今のところ、どちらのアプローチを取るべきか決めることができません。

最初のアプローチ:天気と天気予報の情報を表示するカスタムUIView。そして、このUIViewの中には、天気APIからデータをダウンロードするロジックがあります。これは、APIキーを提供するだけで、データをダウンロードするためのコードを記述する必要がないため、コンポーネントをすぐに使用できることを意味します。

2番目のアプローチ:天気と天気予報の情報を表示するカスタムUIView。これはUIのみであり、内部にロジックは記述されていません。モデルなし、データダウンロードなし。基本的に、このアプローチのアイデアは、このビューを別のWebサービスで再利用できるようにすることです。したがって、たとえばView Controllerで、データを個別にダウンロードします。次に、値をカスタムUIViewに渡すだけです。

「再利用可能な天気ビュー」を持つことが私たちが達成しようとしていることである場合、一般的に何が良いでしょうか? Cocoapodsにあり、他の開発者も再利用できる再利用可能なフレームワーク。

1
SleepNot

あなたの目標は再利用可能なコンポーネントを持つことなので、2番目のアプローチの使用をお勧めします。

さらに、2番目のアプローチを使用します。ビューを分離して考え、必要なデータ(およびそのデータをコンポーネントに提供する構造)について考える必要があります。 APIがデータを提供する構造に依存するべきではありませんが、ビューにとって最も意味のあるものでなければなりません。

これは主に、データのフェッチがビジネスロジックであり、UIロジックではないためです。 ここ いいですねSO MVCパターンのビジネスロジックはどこに行くべきかについての質問です。

一般に、プレゼンテーションを処理するロジックとUI(イベントを処理するロジックなど)のみを配置する必要があります。

最初のアプローチに対する2番目のアプローチのいくつかの利点

  1. データソースが変更されたり、複数のデータソースを使用してそれらの情報を集約したりする必要がある場合があります。
  2. コードの残りの部分もAPIにアクセスする必要がある場合があります。コンポーネントは、API呼び出しを行うためにアプリケーションの残りのコードに依存するか、APIが下位互換性のない方法で変更されたときに戻ってくるロジックを複製することになります。
  3. コンポーネント外のコードにはデータが必要な場合があります
  4. あなたやデザイナーは、UI以外のことを心配することなく、モックデータを使用してUIだけで作業することができます。

最初のアプローチの唯一の利点は、迅速であり、別の抽象化レイヤー(UIとデータソース間のインターフェイス)を追加する必要がないことですが、再利用性が必要なため、これは方法ではありません。


注:私は特にcocoa touchフレームワークを使用したことはありませんが、他のMVC UIフレームワークを使用した経験に基づいて、フレームワークに依存しない方法で回答しようとしました。

1

Cocoa Touch開発では 一般的に推奨 であるMVC設計原則に基づいて、おそらく2番目のアプローチを採用する必要があります。

基本的に、MVCでは、アプリ(またはアプリのサブコンポーネント)は3つの部分に分かれています。ビューには視覚情報が含まれ、モデルにはデータに関する情報が含まれ、コントローラーはモデルとビューの間の通信を管理します。

これは、次のような状況に適合します。カスタムUIViewはビューであり、天気情報のみを表示します。このデータのダウンロードまたは処理については何も知りません。コントローラ(おそらくUIViewControllerサブクラス)は、データをダウンロードしてビューに提供し、データを処理したり、不要な部分を削除したりします。ピクセル、色、または視覚情報については何も知りません。

このように、アプリが完成すると、モジュール化されます。色を更新して見栄えを良くしたいとします。次に、UIViewサブクラスを変更し、コントローラーを無視します。または、APIを変更したい場合。コントローラーを変更します。ビューについて心配する必要はありません。最初のアプローチを採用した場合、両方の変更によって同じファイルが作成され、それ自体がおそらく大きくて乱雑になり、コードの更新に時間がかかります。

これがMVCの本当の利点です。将来コードを変更するためにMVCに戻ると、はるかに簡単で明確になります。

1
JSquared