-
Notifications
You must be signed in to change notification settings - Fork 0
JSON jsend 규칙으로 데이터 모델 구성해보기
sieunju edited this page Feb 11, 2022
·
2 revisions
- 서버에서 주는 데이터 모델이 규격화 되어 있다면 그에 맞게 클라이언트 데이터 모델도 규격화 합니다.
- 서버에서 주는 json 모델이 JSend 방식이라면 아래와 같은 구조에서 데이터 모델을 구성시 불필요한 데이터 모델을 만드는 경우가 있습니다.
{
status: true,
data : {
payload: object or list,
meta: object
}
}
open class BaseResponse(val status: Boolean)
data class SampleResponse(
val data : SampleEntity
): BaseResponse()
data class SampleEntity(
val id: Int
)
- 위 같이 SampleResponse 이라는 불필요한 클래스 들이 생성을 해야 하기때문에 생산성과 클래스 낭비가 됩니다.
- 제네릭을 적절하게 사용해서 ‘SampleResponse’ 의 낭비를 최소화 합니다.
package com.til.model.base
/**
* Description : 일반 Data 형태의 JSend Format
* 모든 데이터 Response 는 해당 데이터 모델을 기반으로 구성해야 한다.
*
* status: true,
* [data]: {
* }
* Created by juhongmin on 2022/01/11
*/
@Serializable
data class JSendBaseResponse<T : Any>(
val data: T? = null,
val isSuccess: Boolean = true
)
@Serializable
data class JSendWithMeta<T : Any, M : MetaEntity>(
@SerialName("payload")
val data: T? = null,
@SerialName("meta")
val meta: M? = null
)
package com.til.data.network
JSendBaseResponse<JSendWithMeta<JSendTestEntity, CustomMetaEntity>>
- 어찌됐던 JSendBaseResponse 에서는 ‘data’ 와 서버 응답 상태인 ‘status’ 만을 받는데 성공을 한다면 HTTP 통신하는 중간에 data 만 전달할수 있는 방법이 있지않을까 라는 생각이 들었습니다. 좀더 디테일하게 들어가면 RepositoryImpl 에서 인터페이스 하나하나 데이터를 변환해서 풀어낼수 있겠지만. 그 방법 보다는 다른 방법이 있을거 같다는 생각이 들었습니다.