restrofit rest android app which json data 中数据模型的最佳设计模式
Best design pattern for data model in restrofit rest android app which json data
我从 https://www.youtube.com/watch?v=xHXn3Kg2IQE 那里学到了应用程序流程的最佳方法(使用服务、内容提供商等),但我不知道什么是重试和处理数据的最佳实践(设计模式)收到的数据。所有数据都在 JSON.
所以我想开发简单的应用程序。该应用程序向服务器发出登录请求。作为回应,我得到描述投票的令牌和 JSON。之后,我必须根据用户输入发送这个复杂的 JSON。这是一种需要填写的表格。投票系统。
{
"data" : {
"name": "Name of kind of voitng",
"general_data" : [ {"name": "n1", "value":1}, {"name": "n1", "value":1}],
"voits": [{"name": "n1", "value":1}, {"name": "n1", "value":1}],
}
}
所以我有 类 映射到这个 JSON。但我还需要在 activity 上表示这些数据。所以现在我有两个 类.
class GeneralDataElementJSON {
String name;
int value;
}
class GeneralDataElementModel {
String name;
int value;
boolean isVoited = false;
}
class GeneralDataElementView extends View {}
现在,在我的方法中,我将检索到的数据映射到 *JSON 类 的实例,然后将 *JSON 类 的实例转换为 *Model 的实例类。 *View 类 的实例是用于显示的 *Model 实例的适配器。
在用户输入后,我将 *Model 类 的实例转换为 *JSON 类 的实例和 *JSON 类 的实例(使用改造) 被转换为 JSON 并发送回服务器。
所以很复杂。我认为应该有更好的方法来做到这一点。但是怎么办?
这就是我对 Retrofit 所做的。只需使用 jsonschema2pojo 生成您的 POJO(模型 类)。这将包含您所有的 getter 和 setter 以及序列化数据,供您随意使用和操作。
假设您正在检索 Data
个对象。当您使用 Retrofit 检索数据时,只需将它们放入 List<Data>
。类似于以下代码:
public interface DataService{
@GET("/{user}/data")
List<Data> listData(@Path("user") String user);
}
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://your.url.com")
.build();
DataService service = restAdapter.create(DataService.class);
List<Data> datas = service.listData("your_parameter");
从设计的角度来看,我发现这是最优雅的方式,因为您的 POJO 应该像 API 更改一样频繁地更改(即非常不频繁)。因此,可以自动生成您的代码并仅引用此黑盒。最好的代码是您不必编写的代码。注意不要过度架构。
我从 https://www.youtube.com/watch?v=xHXn3Kg2IQE 那里学到了应用程序流程的最佳方法(使用服务、内容提供商等),但我不知道什么是重试和处理数据的最佳实践(设计模式)收到的数据。所有数据都在 JSON.
所以我想开发简单的应用程序。该应用程序向服务器发出登录请求。作为回应,我得到描述投票的令牌和 JSON。之后,我必须根据用户输入发送这个复杂的 JSON。这是一种需要填写的表格。投票系统。
{
"data" : {
"name": "Name of kind of voitng",
"general_data" : [ {"name": "n1", "value":1}, {"name": "n1", "value":1}],
"voits": [{"name": "n1", "value":1}, {"name": "n1", "value":1}],
}
}
所以我有 类 映射到这个 JSON。但我还需要在 activity 上表示这些数据。所以现在我有两个 类.
class GeneralDataElementJSON {
String name;
int value;
}
class GeneralDataElementModel {
String name;
int value;
boolean isVoited = false;
}
class GeneralDataElementView extends View {}
现在,在我的方法中,我将检索到的数据映射到 *JSON 类 的实例,然后将 *JSON 类 的实例转换为 *Model 的实例类。 *View 类 的实例是用于显示的 *Model 实例的适配器。
在用户输入后,我将 *Model 类 的实例转换为 *JSON 类 的实例和 *JSON 类 的实例(使用改造) 被转换为 JSON 并发送回服务器。
所以很复杂。我认为应该有更好的方法来做到这一点。但是怎么办?
这就是我对 Retrofit 所做的。只需使用 jsonschema2pojo 生成您的 POJO(模型 类)。这将包含您所有的 getter 和 setter 以及序列化数据,供您随意使用和操作。
假设您正在检索 Data
个对象。当您使用 Retrofit 检索数据时,只需将它们放入 List<Data>
。类似于以下代码:
public interface DataService{
@GET("/{user}/data")
List<Data> listData(@Path("user") String user);
}
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("https://your.url.com")
.build();
DataService service = restAdapter.create(DataService.class);
List<Data> datas = service.listData("your_parameter");
从设计的角度来看,我发现这是最优雅的方式,因为您的 POJO 应该像 API 更改一样频繁地更改(即非常不频繁)。因此,可以自动生成您的代码并仅引用此黑盒。最好的代码是您不必编写的代码。注意不要过度架构。