2

我的应用程序有几个Fragments. 每个都Fragment启动一个Service对来自服务器的资源的 GET 请求。每个响应都是一个 json 数组,该数组被解析为对象并保存到数据库表中,然后Intent广播到启动服务的 Fragment 以查询有问题的表并在列表中显示对象。因此,每个 fragment-service-dbtable 处理一个唯一类型的对象,但除此之外,每个 Fragment-Service 对的代码基本相同:

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

等等。

如何避免代码重复,让一个片段和一个服务可以用于所有请求?一种选择是将状态作为参数传递:

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 回答