我的任务是基本上重建整个应用程序。本质上,应用程序只是一个包含多种类型卡片的Feed(想想带有更新卡,照片卡,OG内容卡的Facebook)等等。我将所有网络处理都移到了一个类中。您可以调用包含所需请求的方法,传入相关参数和监听器。进行网络调用,然后向Listener传递响应。
目前我有一个Fragment类,用我的自定义适配器填充recyclerview。 Fragment类通过在端点上发出分页请求来与我的网络类进行交互。我是否应该有一个与我的片段通信的适配器监听器,例如,单击特定viewHolder卡上的类似图标?我应该让片段制作并管理该网络电话吗?我必须考虑的问题是,如果网络响应失败,我需要取消设置UI元素(如类似图标的颜色)以通知用户此时无法完成其请求。取消设置这些元素是回收器视图中该位置的视图持有者的属性。将所有这些视图持有者信息传递回片段似乎是错误的,只是让片段成为与我的网络类交互的唯一类。让我的适配器处理网络请求也有任何内在错误。
例如,在我的视图持有者元素上设置onClickListener,单击时更新UI并进行调用,然后回复适配器。如果成功则保留所有内容,如果失败,则取消设置UI。这种模式对我有意义,并将各个视图逻辑与片段分离。这样可以吗?很多谷歌搜索让我相信不然。这是我的第一个商业应用程序,我想确保我遵循最好的模式。
我的记录片段看起来像这样
onCreate() {
networkListener = new NetworkResponseListener() {
//Process success response based on response code
onSuccess(JSONObject response, responseCode)
onError(Error e, responseCode) // Handle Errors
}
}
//After scroll listener indicates I need to fetch again
NetworkHelper.makeFeedFetch(networkListener, LastId, GET_FEED_REQUEST_CODE);
所以基本上我会在我的适配器类中执行相同类型的网络交互,例如,像单击图标的viewHolder等等。那可以接受吗?
答案 0 :(得分:0)
如果您确实希望确保遵循最佳模式,则不应从片段中制作NetworkCalls。片段或活动应该只是查看对象,显示由其他类(如您遵循MVP)或ViewModels(MVVM)提供给他们的数据。这些类也不进行直接网络调用。
通常,我们使用Repository模式从远程(Web服务,远程数据库等)或本地数据源(本地数据库)获取数据。 您的网络类是存储库源的候选者。然后为每个动作 这对于我们的业务逻辑是必要的,我们生成一个用例,如果这个用例需要存储库,我们将存储库注入我们的用例。然后我们将这个用例注入我们的Presenter或ViewModel。这种间接看起来似乎有些过分,但它提供了易于扩展和可测试的代码。 Recycler视图也是一个视图,因此您不应该进行网络呼叫 在回收者视图内部。
虽然不是一个确切的解决方案,但
在我的视图持有者元素上设置onClickListener,单击时更新UI并进行调用,然后回复适配器
是更好的IMO。