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

招远网站建设招聘百度网站推广

招远网站建设招聘,百度网站推广,建立网站定制,网站优化外包服务MVC MVC ,早期的开发架构,在安卓里,用res代表V,activity代表Controller层,Model层完成数据请求,更新操作,activity完成view的绑定,以及业务逻辑的编写,更新view&#xf…

MVC

MVC ,早期的开发架构,在安卓里,用res代表V,activity代表Controller层,Model层完成数据请求,更新操作,activity完成view的绑定,以及业务逻辑的编写,更新view,这种模式是单向的,虽然代码存在分层,但是之间的耦合性还是很高,并且C层做的事情很多,久而久之会变得臃肿。

代码实现:

ViewModel

   static class  StudentModel{private String name;private int age;public StudentModel(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}

View层

    static class  StudentView{public  void PrintStudentData(String name ,int age){System.out.println("Student name:"+name+"   age:"+age);}}

Controller

static class StudentController{StudentModel model;StudentView view;public StudentController(StudentModel model, StudentView view) {this.model = model;this.view = view;}public void setStudentName(String name){model.setName(name);}public String getStudentName(){return model.getName();}public void setStudentAge(int age){model.setAge(age);}public  Integer getStudentAge(){return model.getAge();}public  void updateView(StudentView view){view.PrintStudentData(model.getName(),model.getAge());}}

完整代码

package com.example.lib;public class MvcTest {public static void main(String[] args) {StudentModel student = getStudentDataBase();StudentView view = new StudentView();StudentController controller = new StudentController(student,view);controller.updateView(view);controller.setStudentName("lisi");controller.updateView(view);}public static StudentModel getStudentDataBase(){return new StudentModel("zhangsan",18);}static class  StudentModel{private String name;private int age;public StudentModel(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}static class  StudentView{public  void PrintStudentData(String name ,int age){System.out.println("Student name:"+name+"   age:"+age);}}static class StudentController{StudentModel model;StudentView view;public StudentController(StudentModel model, StudentView view) {this.model = model;this.view = view;}public void setStudentName(String name){model.setName(name);}public String getStudentName(){return model.getName();}public void setStudentAge(int age){model.setAge(age);}public  Integer getStudentAge(){return model.getAge();}public  void updateView(StudentView view){view.PrintStudentData(model.getName(),model.getAge());}}}

MVP

于是,出现了MVP模式,这个架构模式在安卓移动端开发中比较常见,将Activity和res统一作为V层,Model层还是完成数据的请求和更新,新建了一个类Presenter,用来作为P层,这样的好处是,方便管理每一个Activity的业务逻辑,拿到数据后,通过接口回调的方式,更新View层,实现了双向通信。缺点是需要实现Presenter类,并且需要开发接口,对简单的业务逻辑比较繁琐,且P层的事情还是比较臃肿

代码实现(以登录事务为例):

ViewModel层

相比与MVC的ViewModel,MVP的不同在于ViewModle多实现了一个IUser接口,从而实现双向通信

    interface IUser{void login(String name,String password,OnLoginListener listener);}interface OnLoginListener{void loginFail();void loginSuccess(User user);}static class UserModel implements IUser{@Overridepublic void login(String name, String password, OnLoginListener listener) {//模拟一下登录if(name.equals("admin")&&password.equals("123456")){User user = new User();user.setUsername(name);user.setPassword(password);listener.loginSuccess(user);}else{listener.loginFail();}}}

View层:

在Android开发中,MVP架构模式里,View层指的是Activity和res。同理,也实现了一个IUserLogin接口,从而和P层实现双向通信

 static class UserView implements IUserLogin{@Overridepublic void showLoading() {System.out.println("正在登录...");}@Overridepublic void hideLoading() {System.out.println("登录完成,获取结果");}@Overridepublic void loginFail() {System.out.println("登录失败");}@Overridepublic void loginSuccess(User user) {System.out.println("username:"+ user.getUsername()+" 登陆成功");}}interface IUserLogin{void showLoading();void hideLoading();void loginFail();void loginSuccess(User user);}

Presenter层

 static class UserPresenter {private final UserModel userModel;private final UserView userView;private final User user;public UserPresenter(UserView userView) {this.userModel = new UserModel();this.userView = userView;user = new User("admin","123456");}void login(){userView.showLoading();userModel.login(user.getUsername(), user.getPassword(), new OnLoginListener() {@Overridepublic void loginFail() {userView.hideLoading();userView.loginFail();}@Overridepublic void loginSuccess(User user) {userView.hideLoading();userView.loginSuccess(user);}});}}

完整代码如下:

package com.example.lib;public class MvpTest {public static void main(String[] args) {UserView loginView  = new UserView();UserPresenter presenter = new UserPresenter(loginView);presenter.login();}static class User{String username;String password;public User() {}public User(String username, String password) {this.username = username;this.password = password;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}interface IUser{void login(String name,String password,OnLoginListener listener);}interface OnLoginListener{void loginFail();void loginSuccess(User user);}static class UserModel implements IUser{@Overridepublic void login(String name, String password, OnLoginListener listener) {//模拟一下登录if(name.equals("admin")&&password.equals("123456")){User user = new User();user.setUsername(name);user.setPassword(password);listener.loginSuccess(user);}else{listener.loginFail();}}}static class UserView implements IUserLogin{@Overridepublic void showLoading() {System.out.println("正在登录...");}@Overridepublic void hideLoading() {System.out.println("登录完成,获取结果");}@Overridepublic void loginFail() {System.out.println("登录失败");}@Overridepublic void loginSuccess(User user) {System.out.println("username:"+ user.getUsername()+" 登陆成功");}}interface IUserLogin{void showLoading();void hideLoading();void loginFail();void loginSuccess(User user);}static class UserPresenter {private final UserModel userModel;private final UserView userView;private final User user;public UserPresenter(UserView userView) {this.userModel = new UserModel();this.userView = userView;user = new User("admin","123456");}void login(){userView.showLoading();userModel.login(user.getUsername(), user.getPassword(), new OnLoginListener() {@Overridepublic void loginFail() {userView.hideLoading();userView.loginFail();}@Overridepublic void loginSuccess(User user) {userView.hideLoading();userView.loginSuccess(user);}});}}}

MVVM

再后面,就是MVVM,同理,Activity和res还是作为V层,Model层请求数据和更新,出现了一个ViewModel的层,这个类的职责在于,对数据进行绑定,以数据驱动View层,同样,当视图层改变后,Model层也能更新,从而实现了M和V之间的双向绑定。最常用的是谷歌2015年推出的jetpack的组件DataBinding,无须进行view绑定,避免了空指针等很多繁琐的业务逻辑。

代码实现:略,用JetPack提供的databinding即可

总结
MVC,MVP,MVVM的出现,都是为了视图分层,使代码结构,逻辑变得清晰,同时,实现类的单一职责,降低耦合度。但是同时选用架构设计模式的时候,也要根据业务类型来考虑,避免出现大多繁琐的设计,总之,一切为了开发效率。

http://www.fp688.cn/news/145147.html

相关文章:

  • 厦门php商城网站建设百度百科官网入口
  • 购物商城网站建设方案子域名大全查询
  • 微信公众号是在哪个网站做的一键优化是什么意思
  • 小学生网上学做辅导哪个网站好附近广告公司
  • wordpress网站打开速度seo网站外链平台
  • 医院网站的建设外媒头条最新消息
  • 注册公司步骤搜索引擎排名优化技术
  • 理财公司网站建设方案免费seo教程资源
  • 备案网站建设方案书范文新乡seo推广
  • 做分享衣服网站的初衷是什么意思免费的网站推广软件下载
  • vi设计网站大全seo网站优化服务
  • 如何做网站后台的维护南昌seo排名外包
  • 百度搜索网站在第一次输入搜索内容后点搜索键没有反应深圳网络推广外包公司
  • Wordpress网站删除多余主题论坛seo教程
  • 企业网站建设管理系统怎么做网络广告推广
  • 景区微网站建设费用品牌营销成功案例
  • 腾讯云网站备案吗市场调研的四个步骤
  • 教你做吃的网站深圳搜索引擎优化推广便宜
  • 如何设计个人网页贴吧aso优化贴吧
  • 郑州网站维护百度站长工具seo查询
  • 珠海网站建设公司排名网络营销sem培训
  • 怎么用ip做网站网站优化方法
  • 武汉网站建设公司多少钱seo是付费还是免费推广
  • 服装定制软件如何进行搜索引擎优化
  • 提供微网站制作网络公司2345网址导航电脑版
  • 网站页面策划公众号开发网站公司
  • 做ppt的模板的网站有哪些内容软文模板app
  • 网站前端怎么做方法西安关键词排名优化
  • 乌兰浩特网站制作网站统计哪个好用
  • php网站助手时事新闻最新消息