Android应用程序架构 - 如何避免碎片服务代码重复

时间:2012-10-25 13:02:36

标签: android architecture android-fragments

我的应用有多个Fragments。每个Fragment启动一个Service,它从服务器发出对资源的GET请求。每个响应都是一个json数组,它被解析为对象并保存到数据库表中,然后向Fragment广播Intent,它启动服务以查询有问题的表并在列表中显示对象。因此,每个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")

等等。

然而,理想情况下我想要一个解决方案,其中片段和服务完全独立于他们的请求,db表保存和对象类型的交易,以及新请求可以轻松添加。如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

我认为你应该能够通过继承来解决这个问题。为公共代码实现AbstractService和AbstractFragment,然后为每个更改的东西都有抽象方法。

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


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