大型项目之一云多端

以下纯属个人意淫:

随着各种小程序的出现,前端开发面临一个问题,就是同一个项目需要在不同的小程序展示,甚至还有h5版 pc web版,如果真对不同的端编写同样一套代码,显然是多余的,这有点像app的发展过程,自从ios和安卓出现之后,人们就从来没有放弃过使用一种语言同时开发ios端和安卓端的尝试,从phonegap到hybird再到rn,最终来到如今的flutter,

而真对小程序的多端开发思路也是一样的,希望用一套代码来生成对应平台的代码,最终完成生产率的转化,这应该也是最终的方案,然而本文所讨论的并不是这种方案,本文所讨论的是关于在不知道有多少端的情况下 如何最大化的复用代码,这本质上和flutter的愿景有点类似,flutter希望真正的统一客户端界面开发,他希望无论什么样的终端,都可以使用flutter来开发,并可以达到媲美原声的效果。而我的方案则是将业务代码与视图代码分开,然后视图代码使用不同终端的语言去编写,同时调用业务代码来完成具体业务。

我无法否认flutter代表未来,但就目前而言,flutter不会给出跨任何小程序的解决方案。

以下是跨小程序的解决方案:

 

1:代码分离,最重要的是将业务代码与应用逻辑代码分离,分离的原则是最大程度将可以复用的地方抽离出来,

  1:我们通常会把业务逻辑写在model层,所以首先肯定要把model层抽离出来

  2:所有有关于数据的处理全部抽离出来,这是对第一步的补充,理论上我们的程序应该是所有的数据都走model来取,同时model层会从不同的地方来获取数据(api 本地缓存 内存缓存)

  3:数据验证最好放在Model层,这样做的目的在于让view层真正做到只关心展示和监听用户操作,同时Model层会定义具体的格式来告诉view层 哪一个字段验证失败

2:model层构建方案

  一旦将model层抽离出来,就需要确定model层的技术实现,是自己定义一套通信机制 还是采用现成 方案,既然是跨多端 最好自己实现一套,而目前通用的有mobx

3:model层管理

  既然将model层抽离出来,必然设计到model层的引入 更新等,可以采用npm私有库的方式(虽然npm的建立初衷并不是此),因为使用npm可以很灵活的让项目集成进model,同时更新model层也很灵活

4:model层设计

  一旦model层独立出来,model不在与具体的view交互,他所关心的只有业务逻辑,所以model必须提供一个配套的具体文档以供view开发者使用

 

如何开发你的view层:

view单独抽离出来之后,view层并不是不关心业务逻辑了,很显然你需要关心你的业务逻辑 并在合适地方调用model的代码,那如何提高view层的开发效率呢,我们这里可以参考有赞的业务型组件思想,view层的开发需要两个人,一个人不需要关心业务逻辑,他只关心页面的开发,(这有点类似于很久以前.net开发的时候前端人员把开发好的页面直接丢给后端,)而另外一个人只关心项目架构和衔接model层,这样每一个都有自己的角色。另外后期专门开发业务型组件的人可以将组件放到私有库,(后期肯定会可以复用)

利用业务型组件来开发view,我们其实仅仅需要针对不同的终端开发不同的界面而已

 

这样做的目的是什么呢?看起来只是定义了一堆规则,将原本可以很简单完成的事情绕了一大圈才完成。

  model层的抽离在于多端代码最大程度复用

  view层的划分在于业务型组件的后期复用,这也符合关注点分离原则,不同的人关注不同的事情,有的人只需要关心界面实现和兼容性以及动画处理,而另外一个人只需要负责关心项目架构和model层对接

这样的划分是否利于项目后期的可维护性?

  我们想想如果不去这样做的话,会是什么情况,我们可以使用taro实现一套代码多端运行,然而从phonegap到RN,这种方式真的很好的解决了我们的问题了吗,phonegap面临的是体验性不如原声,而RN一直没有解决关键组件性能问题,如果涉及到比较精细化 要求比较高的场景RN的性能问题就会暴露无疑,这也是为什么会出现flutter的原因,如果我们分别对每一个小程序单独写一套代码,(我承认这是可行的),然而当涉及到比较大的新需求和逻辑改动,你需要陷入到多个小程序的汪洋大海中,

  而是代码复用方案,当遇到新需求和改动的时候,负责model层的人会专注于业务逻辑的改动,他不需要改动别的,而负责业务型组件的人 则只需要关注页面中修改的部分 他也不需要关注业务逻辑改动的部分,而负责衔接model的那个人因为省去了修改视图和业务代码的工作,所以他只需要关心衔接部分就可以了,这种方案只适合于大型项目,如果用在小型项目绝对会得不偿失,

 

最终的方案:

一个单独维护的model层

针对不同终端设计到项目框架

业务型组件私有库

 

1:然后将业务型组件从一个界面中剥离出来肯定是一个仁者见仁 智者见智的问题,不同的角度都会得到不一样的结果,然后在这个问题上不应该交由技术人员去决定,而是交由产品人员去决定,既然是业务型组件,必然是业务的封装,无疑 产品人员在这个地方比技术人员有更高的话语权

2:在封装业务型组件的过程中,又会存在一个封装度的问题,是尽量将配置外放 还是尽量将配置写在组件内部,配置外放的好处是更加定制化,但是繁琐的配置无意增加了使用人员的复杂度,将业务逻辑封装在外部,只暴露出少许的必须可变的参数,所以应该尽量避免复杂的配置,毕竟业务型组件与通用型组件的使用场景不同。

 

最终的view界面编写会有两个形态:

    1:只根据少许的配置文件即可快速得到一个定制化好的界面,字体 颜色 风格 行为 任何东西我们都不需要去关心

     2:一个类似.net webform的可拖拽的快速界面生成工具

 

转载于:https://www.cnblogs.com/mrzhu/p/11298367.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以VMware workstation15.5.2pro为例如何新建虚拟机,安装镜像文件(最新)

需要用到VMware软件与镜像文件:链接:https://blog.csdn.net/hanhanwanghaha/article/details/105674470 第一步:打开VMware,点击创建新的虚拟机 第二步:选择典型,点击下一步 第三步:选择安装程序光盘镜像文件,并且下面提示已经检测到,再点击下一步

续--Flask, Django - 区别

1. 目录结构 参考:https://blog.csdn.net/yang9520/article/details/79740374 中文文档(http://docs.jinkan.org/docs/flask/)一般情况下,Django很系统、统一。Flask项目目录风格不同一,即使用上了蓝图。 2…

VMware workstation 15.5.2及镜像文件下载

链接: https://pan.baidu.com/s/175imV_FeTFcitFHay07vHQ 提取码: ayh3 希望对大家有用! https://blog.csdn.net/hanhanwanghaha一个超级无敌可爱的人鸭 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出…

matplotlib setting zh-hans

1 from matplotlib import pyplot as plt2 from matplotlib import font_manager3 4 import random5 #                             you font famaily location6 font_pro font_manager.FontProperties(fnameC:\Windows\Fonts\SIMYOU.TTF)7 8 9 …

无法连接虚拟设备 floppy0,因为主机上没有相应的设备。 您要在每次开启此虚拟机时都尝试连接此虚拟设备吗?

如果出现以上情况,应该是没有连接镜像文件,在添加镜像文件的地方添加镜像文件就可以了 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处&…

CentOS 6.5 下安装 Kibana5

1. 导入Elastic PGP Key 执行命令 rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 2. 安装Kibana的rpm库使用 ll /etc/yum.repos.d/ 查看当前机器上已经安装的rpm库,如果没有Kibana的话需要创建。用vim创建新的repo文件,vim /etc/yu…

详述白盒测试的逻辑覆盖法的条件组合覆盖及其优缺点

概念: 设计足够多的测试用例,使被测程序中每个判定的所有可能的条件取值组合至少执行一次。 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出…

Windows脚本编码器算法分析与破译

Windows脚本编码器算法分析与破译 作者:lake2 大家对脚本一定很熟悉吧,呵呵,脚本编写简单无需编译所以非常方便。不过,脚本的一个缺点是它不能保护脚本的内容,因为随便谁拿到一个脚本程序都可以用记事本打开来看内容。…

详述白盒测试的逻辑覆盖的路径覆盖及其优缺点

详述白盒测试的逻辑覆盖的路径覆盖及其优缺点定义:与其他覆盖的关系:路径覆盖率:测试用例:优缺点:定义: https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号&…

第十届机器学习及其应用研讨会 MLA’2012 Slides

第十届机器学习及其应用研讨会 MLA’2012 Slides On Learning Sparse Structured Input-Output Models [PDF], Prof. Eric Xing (卡内基梅隆大学, 美国) Learning with Implicit/Explicit Structures [PDF], Prof. James Kwok(香港科技大学&…

Jmeter下载安装详细步骤(最新)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 官网地址 http://jmeter.apache.org/ 步骤 1.点击Downl…

Repeater嵌套Repeater获取父级绑定项

<%#DataBinder.Eval((Container.NamingContainer.NamingContainer as RepeaterItem).DataItem,"Comm_ID") %>转载于:https://www.cnblogs.com/linlin/archive/2011/01/20/1939930.html

怎样使用navicat将mysql的数据表导出保存(转储SQL文件)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 1.点击你所创建的表&#xff0c; 2.右键点击转储SQL文件&…

ORA-01102

ORA-01102 一、解决问题 此问题因为lk<sid>文件造成。 [oracleocp dbs]$ fuser -u lkOCPTEST lkOCPTEST: 14158(oracle) 14160(oracle) 14162(oracle) 14164(oracle) 14166(oracle) 14168(oracle) 14170(oracle) 14172(oracle) 14174(oracle) 14176(oracle) 1…

eclipse-java-2019-12-R-win32-x86_64分享

eclipse-java-2019-12-R-win32-x86_64分享下载 链接&#xff1a;https://pan.baidu.com/s/11gTB2SDVyNVscUQ6igK5Zg 提取码&#xff1a;e0zm https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有…

[Vo. 1 No. 1] 高等代数一题[Sep. 19, 2013]

$Problem .$ 设 $a_1,a_2,\cdots,a_n$ 为互不相同的正实数, 证明矩阵 $A\left(\frac{1}{a_ia_j}\right)_{n\times n}$ 为正定矩阵. $Solution\text{ 1}.$ For any $X(x_1,\cdots,x_n)^\mathrm{T}\neq 0$, we have\begin{eqnarray*}X^\mathrm{T}AX&& \sum_{i,j1}^n \f…

白盒测试中几种逻辑覆盖法及其优缺点

语句覆盖法&#xff1a; 详述&#xff1a; https://blog.csdn.net/hanhanwanghaha/article/details/105633019 定义&#xff1a;设计若干个测试用例&#xff0c;使被测试程序中的每条可执行语句至少执行一次。比如说我们测试用例里面有10个语句&#xff0c;那么这10个语句都…

Java如何连接mysql数据库详解(代码)

工具&#xff1a; https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; eclipseMysqlMysql驱动链接&#xff1a;…

docker 笔记

---恢复内容开始--- 安装 win10专业版 开启Hyper-V 安装docker 下载地址&#xff1a;https://store.docker.com/editions/community/docker-ce-desktop-windows vs2017 直接添加 项目docker docker stop zeekodb //停止这个容器 docker start zeekodb //运行这个容器 首先你要…

如何利用java对mysql数据库进行增删改查

java-mysql前提&#xff1a;增&#xff1a;删:改&#xff1a;查&#xff1a;前提&#xff1a; 首先要对java与数据库进行连接哦&#xff01; 连接步骤 https://blog.csdn.net/hanhanwanghaha/article/details/105716885 代码如下&#xff1a; 增&#xff1a; Test//数据插入…