美文网首页
App中网络分层架构的设计实践

App中网络分层架构的设计实践

作者: 多来猫 | 来源:发表于2022-07-22 10:52 被阅读0次

在新公司中担任架构师的职位后想对原有的app系统进行架构的重构。
先简单吐槽说一下原来App的架构,据说App的系统架构用的是MVC架构(我呵呵),懂的人都知道此时的我心里有几万头草泥马在奔腾了。
虽然我第一件做的事情是对系统进行分层和模块划分,但最近因为网络模块无法满足业务需求,我就同时对网络进行了设计。
新的网络模块的设计采用了3层的设计模式,从下到上分别是Api层、Service层、interface层,架构图如下(自己手绘的,还请见谅)。


image.png

下面分别介绍各层的作用,及代码描述语言

Api层

如图中所示,Api层承担的责任有
1、封装第三方网络库
2、实现post、get、upload等方法
3、实现cancel方法

class HTTPApi {
  HTTPApi getInstance() {
    //如果需要保管第三方的网络对象,这里可以实现一个单例
  }
  get(url, args, header, userAgent) {
    //调用第三方get方法
    return respData;
  }
  post(url, args, header, userAgent) {
    //调用第三方post方法
    return respData;
  }
}

Service层

如图中所示,Service层承担的责任有
1、设置公共参数
2、设置header、ua
3、初步解析数据并处理公共Error

class HTTPService {
  header() {
    return {
      "authentication": "133mfdmfldd",
      "Content-Type": "application/json",
      "X-timestamp": currentTimeMillis(),
      ...
    }
  }
  userAgent() {
    return "自定义的userAgent,一般是在系统ua后面加自己的内容";
  }
  static get(url, args, success, failure) {
    //args+公共参数
    resp = HTTPApi.instance.get(url, args, header(), userAgent());
    if (resp.code == "A000") {
      success(resp.data);
    } else if (resp.code == "A220") {
      //处理此公共错误
    } else if(resp.code == "B150") {
      //处理此公共错误
    } else {
      //返回业务错误
      failure(AppError(resp.code, resp.message));
    }
  }
  static post(url, args) {
    //args+公共参数
    resp = HTTPApi.instance.post(url, args, header(), userAgent());
    if (resp.code == "A000") {
      success(resp.data);
    } else if (resp.code == "A220") {
      //处理此公共错误
    } else if(resp.code == "B150") {
      //处理此公共错误
    } else {
      //返回业务错误
      failure(AppError(resp.code, resp.message));
    }
  }
}

Interface层

Interface层的责任比较简单,他主要是·对每个业务接口进行封装

class HTTPUserInterface {
  static getUrl(path) {
    if (kDebug) {
      return "http://debug-user.abc.com/" + path;
    } else {
      return "http://user.abc.com/" + path;
    }
  }
  static login(userName, password, success, failure) {
    Map args = {"userName": userName, "password": password};
    HTTPService.post(getUrl("account/login"), args, success, failure):
  }
  static getUserInfo(success, failure) {
    HTTPService.get(getUrl("account/userInfo"), null, success, failure);
  }
}
class HTTPMarketInterface {
  //基本同HTTPUserInterface
}
...

UI层

UI层即为用户能见到的界面,此层不属于网络层,但会调用Service层来获取数据

class LoginPage {
  //点击登录按钮后
  loginButtonClicked() {
    HTTPUserInterface.login("aprogram", "123456", (data) {
      _response = LoginModel.fromJson(data);
      //刷新页面,跳转页面
    }, (error) {
      Toast(error.message);
    });
  }
}

欢迎大家交流沟通

相关文章

  • App中网络分层架构的设计实践

    在新公司中担任架构师的职位后想对原有的app系统进行架构的重构。先简单吐槽说一下原来App的架构,据说App的系统...

  • 架构分层

    架构设计的目的是解决软件系统复杂度带来的问题。分层架构设计只不过是架构设计中的一种设计思想和方法论 认识分层架构 ...

  • 网络框架的封装(一):第一层参数组装层的API设计

    什么是分层 app的架构,不管是MVC,MVP,MVVM,架构演变中,贯穿始终的概念都是分层和解耦.那么这个分层和...

  • 2018-05-31

    常见的互联网分层架构 腾讯WeTest浅析分布式系统 互联网分层架构中,各层次水平扩展的实践又有所不同: 1、反向...

  • MVVM

    不同设计模式或者架构,是为了解决不同的问题而出现的,所以不要为了设计模式而设计模式.设计模式,是为了让APP的分层...

  • DDD战略4 架构

    GitChat课程《领域驱动设计--战略篇》笔记,课程作者张逸 一.分层架构 分层架构是运用最为广泛的架构模式,软...

  • App架构设计

    App架构设计经验谈:技术选型 App架构设计经验谈:接口的设计 App架构设计经验谈:数据层的设计 App架构设...

  • 前端通用请求层封装

    什么决定了一个项目架构设计的好坏?很多优秀的项目构架都是基于分层的思想,比如开放互联的网络协议,分层方便我们快速调...

  • 聊聊,交个朋友——反思系统设计

    早期,我读完设计模式、面向对象设计、企业架构模式、领域驱动设计等书之后,形成了一个观念。在分层的架构中,严格意义上...

  • iOS VIPER架构实践(一):从MVC到MVVM到VIPER

    最近半年在写app的时候,研究了一下各种iOS代码架构,最后选择了VIPER进行实践,在此对实践中遇到的各种设计问...

网友评论

      本文标题:App中网络分层架构的设计实践

      本文链接:https://www.haomeiwen.com/subject/ucrmirtx.html