2

私のアプリにはいくつかありFragmentsます。それぞれが、サーバーからのリソースに対してGET要求を行うをFragment開始します。Service各応答はjson配列であり、オブジェクトに解析されてデータベーステーブルに保存されます。その後Intent、サービスを開始したフラグメントにブロードキャストされ、問題のテーブルをクエリしてオブジェクトをリストに表示します。したがって、各fragment-service-dbtableは一意のタイプのオブジェクトを処理しますが、それ以外のコードは、基本的に各Fragment-Serviceペア間で同一です。

NewsFragment, NewsPostsRequestService (deals with NewsPostObjects)
UserFragment, UserRequestService (deals with UserObjects)
FavoritesFragment, FavoritesRequestServices (deals with FavsObjects)

等。

コードの重複を回避して、1つのフラグメントと1つのサービスをすべてのリクエストに使用できるようにするにはどうすればよいですか?1つのオプションは、状態をパラメーターとして渡すことです。

CustomFragment fragment = CustomFragment.newInstate(NewsState);

次に実行します(擬似コード):

if(mState==NEWS) apiRequest("/news")
else if(mState==USERS) apiRequest("/users")

等々。

ただし、フラグメントとサービスが要求するリソースから完全に独立し、保存先のデータベーステーブルと処理するオブジェクトタイプが完全に独立していて、新しい要求を簡単に追加できるソリューションが理想的です。これはどのように達成できますか?

4

1 に答える 1

2

継承で解決できるはずだと思います。共通コードに AbstractService と AbstractFragment を実装し、それぞれに変更対象の抽象メソッドを配置します。

AbstractFragment<T>
AbstractPostsRequestService<T>
apiRequest(getRequestPath())
abstract String getRequestPath();


NewsFragment extends AbstractFragment<NewsPostObjects>
NewsPostsRequestService extends AbstractPostsRequestsService<NewsPostObjects>
String getRequestPath() {return "/news";}

于 2012-10-25T13:47:13.773 に答える