Тренируюсь писать простенькие приложения, но поглядывая у других людей, заметил некоторые различия в реализации шаблона, и вот возник вопрос, я сам то правильно делаю?
//синглтон LiveData
object MyLiveData:MutableLiveData<String>() {
//получение значения из liveData
fun takeValue()=value
//записывание значения в liveData
fun pushValue(string:String?){ value=string }
}
//Model
open class Model {
protected open val dataBase:FirebaseDatabase= FirebaseDatabase.getInstance()
protected open val myRef:DatabaseReference=dataBase.getReference("MVVMmessages")
protected open val myLiveData=MyLiveData
//получение сообщения из базы данных
open fun getMessageFromDB(){
myRef.addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {}
override fun onDataChange(p0: DataSnapshot) {
myLiveData.pushValue(p0.getValue(String::class.java))
}
})
}
//внедрение значения в базу данных
open fun pushMessageToDB(message:String?){
myRef.setValue(message)
}
}
//ViewModel
open class MyViewModel:ViewModel() {
protected open val model= Model()
protected open val myLiveData:MyLiveData=MyLiveData
//получение значения из базы данных
open fun getter(){
model.getMessageFromDB()
}
//установка значения в базу данных
open fun setter(){
model.pushMessageToDB(myLiveData.takeValue())
}
}
//View
open class MainActivity : AppCompatActivity() {
protected open lateinit var myViewModel: MyViewModel
protected open var myLiveData:MyLiveData=MyLiveData
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// установка наблюдателя
myLiveData.observe(this, Observer { tvTextForObserver.text=it })
myViewModel=ViewModelProvider(this).get(MyViewModel::class.java)
//запись данных
btn_push.setOnClickListener {
myLiveData.pushValue(edText.text.toString())
myViewModel.setter()
edText.text.clear()
}
//получение данных
btn_get.setOnClickListener {
myViewModel.getter()
tvText.text=myLiveData.takeValue()
}
btn_clear.setOnClickListener {
tvText.text=""
edText.text.clear()
}
}
}