我的应用有多个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表保存和对象类型的交易,以及新请求可以轻松添加。如何实现这一目标?
答案 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";}
等