当前位置: 首页 > news >正文

校园二手网站开发的意义房天下网站建设

校园二手网站开发的意义,房天下网站建设,在线写网页,品牌建设存在的问题一、介绍 在开发设计模式中#xff0c;模式经历了多次迭代#xff0c;从MVC到MVP#xff0c;再到如今的MVVM。发现的过程其实很简单#xff0c;就是为了项目更好的管理。 设计模式严格来说属于软件工程的范畴#xff0c;但是如今在各大面试中或者开发中#xff0c;设计模…一、介绍 在开发设计模式中模式经历了多次迭代从MVC到MVP再到如今的MVVM。发现的过程其实很简单就是为了项目更好的管理。 设计模式严格来说属于软件工程的范畴但是如今在各大面试中或者开发中设计模式被问的很多。特别是八股文的二十三种设计模式可分三大类行为型、结构型、创建型。 二、模式介绍 模式的设计更多的体现在管理与架构能力即使在项目中你不用任何设计模式代码也可以正常的跑起来但是通过模式设计以后在项目管理与质量控制以及解耦等场景特别方便。 任何设计模式和手段都是为了项目的更好管理这种模式更像一种流程。从技术角度来分析不能作为衡量一个人的技术好坏但是可以作为参考来判断一个人的综合能力以及设计、架构能力。 了解设计模式可以提高一个人的综合能力。 三、MVMM详解与设计 MVVM是什么 目前在做有UI展示的一些项目或者端都在说MVVM设计模式。MVVM全程view-viewModel-Model。还是分为三层View层viewModel:view与业务层Model数据业务层 View是我们fragment或者Activity界面主要处理UI渲染和交互的 viewModel介于view与Module之前处理数据与逻辑上的将Model请求的结果返回给view层 Model:与viewModel打交道将view需要的数据通过Model层来请求然后将请求到的结果返回给viewModel。 Mvvm流程 在Mvvm设计模式中view主要就是做数据与UI的绑定常见的View与Model没有直接交互需要申明都是通过ViewModel进行交互的。ViewModel从名字就可以看出是View与Model的拼写所以肯定是与View和Moel有关在MVVM中ViewModel的核心作用就是作为View与Model的桥梁将View的需求告诉Model然后从Model中将结果拿到处理好给ViewView进行渲染。 Mvvm的助手databinding 通过Google官方我们也了解到MVVM的推波导致了DataBinding的被很好的推广在Mvvm中View中的绑定和页面的view是通过Databinding来完成很多开发者可能还没体验过DataBinding甚至也没有使用过这个也不影响到Mvvm的使用因为DataBinding只负责View与Data的绑定即使你不会可以手动处理。 如果想了解DataBinding的小伙伴可以看博主一下的文档 Android databinding的接入使用与详解(一)_android databinding使用_蜗牛、Z的博客-CSDN博客 Android databinding之RecycleView使用与讲解(二)_android databinding recyclerview_蜗牛、Z的博客-CSDN博客 Android databinding之数据单向与双向绑定详解与使用(三)_databinding双向绑定_蜗牛、Z的博客-CSDN博客 Android databinding之BindingAdapter与BindingConversion详解与使用(四)_蜗牛、Z的博客-CSDN博客 Android databinding之BindingMethod与BindingMethods介绍与使用(五)_android开发bindingmethods的使用_蜗牛、Z的博客-CSDN博客 Android DataBinding之布局include 和 viewStub详解与使用(六)_databinding viewstub_蜗牛、Z的博客-CSDN博客 Android DataBinding之布局中layout事件、运算逻辑、资源、工具类的使用与详解(七)_databinding layout_蜗牛、Z的博客-CSDN博客 新手礼包 这几篇文档基本都是从零开始学databinding的文章只要你跟着看慢慢实践里面的dmeo都是没问题的。以上新手礼包可以帮你很好的处理Mvvm中数据的绑定 数据传递MutableLiveData 通过以上知道ViewModel与View进行数据交互他们之间如何传递数据在viewmodel中提供了 MutableLiveData它继承了LiveData类似事件订阅你发送了数据在view中订阅即可数据将会回传到订阅处。LiveData也支持生命周期的绑定防止数据订阅中当前页面销毁数据还在订阅导致页面发生内存泄露。 四、实战 通过以上的学习我们大概了解了Mvvm包括哪些如何架构和搭建MVVM。通过关键模块的处理我们将继续学习实战。 依赖库 implementation androidx.lifecycle:lifecycle-viewmodel:2.0.0implementation androidx.lifecycle:lifecycle-extensions:2.0.0 Model模块 model主要是数据处理在搭建代码的时候我们最好有良好的编程风格可以先搭建一个基础、抽象类后面的model都继承直接使用即使是空类也要写一个方便以后扩展。 open abstract class BaseModel { } //一般梳理数据类比较多 class MyModel : BaseModel() {//网络数据的获取//数据库的操作//本地的数据缓存添加与删除public fun getInitData():String{return init data that info}} Model的是和数据打交道处理好我们就可以处理搭建ViewModel了 ViewModel层 ViewModel层夹在View与model之间是逻辑的中转view要什么找ViewModelmodel通过ViewModel把数据传递给View。 ViewModel这里面主要有两块搭建和创建 搭建 搭建需要继承public AndroidViewModel(NonNull Application application)由于ViewModel需要与View合作所以还需要了解当前的对象生命周期防止内存泄露等发生。 这里需要使用到接口LifecycleObserver LifecycleObserver用法 直接继承然后通过状态绑定对应的方法当lifecycle绑定完就可以分发生命周期状态 OnLifecycleEvent(Lifecycle.Event.ON_START)public fun onstart(){log(onstart)} 1、生命状态回调 //定义了页面监听生命周期监听 interface BaseViewModelLifecycleObserver : LifecycleObserver {companion object{const val TAGlife}OnLifecycleEvent(Lifecycle.Event.ON_START)public fun onstart(){log(onstart)}OnLifecycleEvent(Lifecycle.Event.ON_STOP)public fun onStop() {log(onStop)}OnLifecycleEvent(Lifecycle.Event.ON_RESUME)public fun onResume() {log(onResume)}OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)public fun onPause() {log(onPause)}OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)public fun ondestory() {log(ondestory)}public fun log(msg:String){Log.e(TAG,${msg})} } 2、BaseViewModel abstract open class BaseViewModel(val context: Application) : AndroidViewModel(context),BaseViewModelLifecycleObserver {} 3、定义业务的ViewModel class MyViewModel(context: Application) : BaseViewModel(context) {private val model: MyModel by lazy { MyModel() }public val initLiveData: MutableLiveDataString by lazy { MutableLiveData() }public fun showToast(msg: String) {Toast.makeText(getApplication(), msg, Toast.LENGTH_SHORT).show()}public fun initData() {val datamodel.getInitData()initLiveData.valuedata}} 这里面多了一个MutableLiveData就是数据回传的订阅ViewModel发送了数据给View通过LiveData进行订阅。在这里面要创建Model对象 创建 创建这里面涉及到了kotlin的泛型问题相比Javakotlin的泛型比较复杂由于创建是和DataBinding绑在一起的这边先介绍泛型的创建与生命周期的绑定 val type javaClass.genericSuperclassif (type ! null type is ParameterizedType) {val actualTypeArguments type.actualTypeArgumentsval tClass actualTypeArguments[1] viewModel AndroidViewModelFactory.getInstance(application).create(tClass as ClassV)}lifecycle.addObserver(viewModel) lifecycle.addObserver(viewModel)绑定了当前的生命周期 注意在需要消费否则导致内存泄露 override fun onDestroy() {super.onDestroy()lifecycle.removeObserver(viewModel)} View模块 View模块主要就是DataBinding的创建与ViewMOdel的创建ViewModel上面已介绍如何创建,下面将介绍如何去架构这个基础页面去管理 这边架构的页面分为两个类第一个是DataBinding类还有一个是DataBinding与ViewModel继承类为什么要分开因为在正常业务中有些模块不需要ViewModel但是DataBinding是必须使用所以只需要继承DataBinding类即可。 DataBinding基础类   open abstract class BaseDataBindModelActivityT : ViewDataBinding() : FragmentActivity() {public lateinit var binding: T//配置当前页面布局资源LayoutRespublic abstract fun getLayoutResId(): Intoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding DataBindingUtil.setContentViewT(this, getLayoutResId())initViewModel()initObser()initDataBeforInitView()initVie()initDataAfterInitView()}//初始化viewmodelopen protected fun initViewModel() {}//初始化页面abstract fun initVie()//初始化livedata的监听abstract fun initObser()//获取数据在initview之前abstract fun initDataBeforInitView()//获取数据在initview之后abstract fun initDataAfterInitView()//页面消费之前解绑override fun onDestroy() {if (binding ! null) {binding.unbind()}super.onDestroy()}} ViewModelDataBinding基础类 abstract class BaseViewModelBindActivityT : ViewDataBinding, V : BaseViewModel() :BaseDataBindModelActivityT() {lateinit var viewModel: Voverride fun initViewModel() {super.initViewModel()val type javaClass.genericSuperclassif (type ! null type is ParameterizedType) {val actualTypeArguments type.actualTypeArgumentsval tClass actualTypeArguments[1]viewModel AndroidViewModelFactory.getInstance(application).create(tClass as ClassV)}lifecycle.addObserver(viewModel)}override fun onDestroy() {super.onDestroy()lifecycle.removeObserver(viewModel)}} 通过以上的配置基本已完成了MVVM的搭建。 小时牛刀 class MyTestViewBindActivity : BaseViewModelBindActivityTestViewBind, MyViewModel() {override fun getLayoutResId(): Int {return R.layout.layout_test_view_bind}override fun initVie() {binding.btnTest.setOnClickListener {viewModel.showToast(你好)}binding.btnInit.setOnClickListener {//调用了初始化事件viewModel.initData()}}override fun initObser() {//数据订阅事件viewModel.initLiveData.observe(this) {binding.textInfo.text it}}override fun initDataBeforInitView() {}override fun initDataAfterInitView() {} } 绑定的页面生命周期回调 运行效果 五、总结 1.通过以上学习完成了MVVM的基础结构与如何架构一个MVVM页面出来。Demo中也基本完成了大家的难点问题。 2.如果不了解生命周期的可以参考Demo中直接拿去用避免处理不好导致内存泄露 3.MVVM需要databinding的参与如果不了解的小伙伴直接看我的DataBinding文章看完直接上项目使用是没任何问题有问题我得文章中也会提出这边都是干货都是博主自己总结与写出来的。希望大家能够受益。
http://www.zqtcl.cn/news/356416/

相关文章:

  • 做推广的网站微信号企业免费网站制作
  • 做旅游网站的引言上海公司网站建设哪家好
  • 找项目去哪个网站网站建设一条龙全包
  • 网站 数据库 模板网站系统建设合作合同范本
  • 网站空间租赁费用企业网站建设需要多少钱知乎
  • 免费建网站哪个模板多浅谈学校网站建设
  • 精致的个人网站手机网站建设基本流程图
  • 优秀网站网页设计图片主机屋做网站视频
  • 安徽网站建设电话编程一个最简单游戏代码
  • 西宁圆井模板我自己做的网站在线平面设计图
  • 浦口区网站建设技术指导做软件需要网站吗
  • 丹东有做公司网站的吗搜索引擎 wordpress
  • 做网站代理国内课程网站建设现状
  • 中国建设银行手机网站下载从零开始建设企业网站
  • 网站友情链接怎么弄seo平台
  • 建设网站一定要备案吗嘉兴做网站设计
  • 如何制作营销网站模板做外贸需要关注的网站有什么好处
  • 东莞勒流网站制作wordpress 自定义字段 查询
  • 温州网站开发风格做影视剧组演员垂直平台网站
  • c 网站开发培训怎么做网站的站点地图
  • html 网站模板简单网站制作北京海淀
  • 大庆做网站找谁珠海网站搭建
  • 网站建设方面的外文宿迁房产网找房
  • 运营 网站遵义网站开发制作公司
  • 动力论坛源码网站后台地址是什么网站上微信支付功能
  • 网站需求分析模板深圳3d制作
  • 宿迁网站建设推广公司wordpress忘记密码了
  • 成都双语网站开发flat wordpress
  • 大连做公司网站的公司网络营销的网站
  • 做网站 人工智能怎么做商业服务网站