今天生病了呢=+=。其实今天预计将所有的MVVM都做完的,但是就结果而言,并没有想象中来的简单。嘛嘛嘛,不过基本的想法也已经掌握了,感觉Kotlin真的挺不错的,不过仅仅是作为一门开发语言而言。但是作为认知框架而言,我感觉自己又被蒙上了一层面纱,可怜的我= =
为什么要放上这段代码呢,因为我感觉在这段代码前段写的内容有一定的水平==
package com.coolweather.coolweatherjetpack.data.db
import com.coolweather.coolweatherjetpack.data.model.place.City
import com.coolweather.coolweatherjetpack.data.model.place.County
import com.coolweather.coolweatherjetpack.data.model.place.Province
import org.litepal.LitePal
/**
* Desc: 很简单的三层储存结构,其实我真的感觉挺奇怪的,为什么明明已经是使用kotlin,使用的还是Java的null值判定语法
* Kotlin相比Java的丰富点不就在于语法糖的滋味吗= =!如果不能活用这些,那使用kotlin的意义究竟在哪里?
* 仅仅是为了更加绚丽的表达,因为他使用一些关键词能够较为轻易地实现一些设计模式?
* 当一门语言出现,并且号称这门语言完全兼容另外一门语言时,
* 这就很有意思了,因为这意味着这门语言的使用者将会面临更多的蒙蔽!
* 他们距离真相的距离不会相比以前更近,反而仅仅会距离越来越远。
* 所以,当有人问我学什么语言比较好,我会告诉他,学你看的最顺眼的,或者是你第一眼看到的,因为真的差不多。
* 以上,内容是我所立的一个flag,如果那一天我真的出名了,我希望我回来再看到这句话能够无愧于心。
*
* 这里使用一个通过数据库获取的方式进行所有区域的存储操作。
* 因为GreenDao自带缓存,虽然很多时候并不关心这些,但是这层储存的确存在,在一些时候也会出来捣乱。
*/
class PlaceDao {
fun getProvinceList(): MutableList<Province> = LitePal.findAll(Province::class.java)
//数据库操作,相比GreenDao有更疯狂的封装,链式的调用依然酷炫
fun getCityList(provinceId: Int): MutableList<City> =
LitePal.where("provinceId = ?", provinceId.toString()).find(City::class.java)
fun getCountyList(cityId: Int): MutableList<County> =
LitePal.where("cityId = ?", cityId.toString()).find(County::class.java)
fun saveProvinceList(provinceList: List<Province>?) {
if (provinceList != null && provinceList.isNotEmpty()) {
LitePal.saveAll(provinceList)
}
}
fun saveCityList(cityList: List<City>?) {
if (cityList != null && cityList.isNotEmpty()) {
LitePal.saveAll(cityList)
}
}
fun saveCountyList(countyList: List<County>?) {
if (countyList != null && countyList.isNotEmpty()) {
LitePal.saveAll(countyList)
}
}
}
上面这些其实都是没多大用的事情,MVVM的关键在于这个类
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.lifecycle;
/**
* {@link LiveData} which publicly exposes {@link #setValue(T)} and {@link #postValue(T)} method.
*
* @param <T> The type of data hold by this instance
*/
@SuppressWarnings("WeakerAccess")
public class MutableLiveData<T> extends LiveData<T> {
@Override
public void postValue(T value) {
super.postValue(value);
}
@Override
public void setValue(T value) {
super.setValue(value);
}
}
从set和post这两个方法就基本可以知道,观察者模式,与此同时,我也感觉到了,这个架构的核心也是在于基于观察者模式的这个类。并且关键在于推送数据变化到对应的视图,而并非让对应的视图手动去拉取对应的数据从而更新。这段话就是mvvm的核心了吧,个人感觉= =欢迎打脸~~
貌似kotlin的视图都具有绑定数据的功能,并且根据这个数据进行变化的骚操作,其实Java也能实现类似的功能,只是很多时候并没有这么简单而已。
今天就先这样吧,头疼的很,自己的身体还是很重要的= =,如果身体坏掉了,就不能学习自己喜欢的东西了。

本文探讨了Kotlin语言在MVVM架构中的应用,分析了其相对于Java的优势与局限,重点介绍了LiveData与观察者模式在数据绑定与视图更新中的作用。

3万+

被折叠的 条评论
为什么被折叠?



