Repository pattern은 애플리케이션에 있을 수 있는 여러 데이터 소스, 애플리케이션의 데이터가 내부 데이터베이스 또는 웹 API와 같은 외부 서비스로부터 기인하는 것을 숨기는데 사용되는 추상화입니다.
이 패턴은 Android 애플리케이션을 개발할 때 널리 사용되며, 애플리케이션을 만드는 데 권장되고 있습니다.
다음 다이어그램은 Android의 일반 모바일 애플리케이션 아키텍처를 표시합니다.
액티비티와 프레그먼트는 서로 다른 ViewModel의 인스턴스를 하나 이상 가질 수 있으며 없을 수도 있습니다. 각 ViewModel 은 특정 저장소(Repository)에 대한 종속성을 가지며 이 저장소는 여러 ViewModel 에서 공유될 수 있습니다.
저장소는 정보를 검색할 데이터 소스를 알고 있습니다. 이 경우 저장소는 SQLite의 상위 계층인 Room 모델과 웹 서비스와 통신하기 위해 Retrofit 에서 제공하는 서비스 인터페이스를 알고 있습니다.
각 레이어는 아래 레이어만 알고 있으며 ViewModel 은 저장소가 누구와 상호작용하는지 모릅니다.
알림을 작성하기 위한 EditText 와 알림을 추가하는 버튼, 샘플 액티비티를 살펴보겠습니다.
class CreateReminderActivity : AppCompatActivity() {
val viewModel: CreateReminderViewModel by lazy {
val app = application as ReminderApp
val viewModelProviderFactory =
CreateReminderViewModelProviderFactory(
app,
intent
)
ViewModelProvider(
this,
viewModelProviderFactory
)[CreateReminderViewModel::class.java]
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.createreminderactivity)
val reminderEditText: EditText = findViewById(R.id.reminderEditTextView)
val createReminderButton: Button = findViewById(R.id.createReminderButton)
createReminderButton.setOnClickListener {
createReminder(
text = reminderEditText.text.toString()
)
}
}
private fun createReminder(text: String) {
if (text.isEmpty()) {
showToast(message = "Reminder text field is empty")
} else {
viewModel.createReminder(text = text)
}
}
private fun showToast(message: String) {
...
}
}
댓글 없음:
댓글 쓰기