开发日常总结

328 阅读4分钟

我正在参加「掘金·启航计划」

约定的作用

类似Vue这种框架的作用,架构的作用主要是定义了一个模式包括数据、事件的流向,更好地保障了项目质量、可持续性,也让人容易上手。  

举个例子:MVC就是个很经典的架构,其他的如MVVM等本质上是对MVC对再细分;M是数据本身、V是展示数据、C是控制数据  

如果接口够给力,是不太需要MVVM的,或者多个MVC组合起来就可以了

对前端友好的接口有这几点:

{
	"message": "给用户看的消息,不用包含调用堆栈等信息",
	"debugMessage": "这个错误用来调试的,内部错误显示在这个字段里,不要写在message",
	"code": "0",
	"hasError": false,
	"dataDesc": "data类型只有对象一种类型,无数据的时候返回一个空对象 {}(而非 null),有多条数据的时候将  Array 类型数据放在其内部的 list 之类的属性中",
	"data": {
		"goodsName": "一个商品名",
		"goodsId": "685",
		"price": "98.88",
		"pricefen": 9888,
		"priceDesc": "价格返回字符串,以分为单位的再返回个整数"
	}
}

系统是个前后端配合、合理分工才能游刃有余。

反面例子:

this.buttonHidden = (data.orderStatusStr === '正常' || 
    data.orderStatusStr === '已完成') && 
    data.paymentStatus === 'PAYED' &&
    (data.performStatusStr === '未使用'|| 
    data.performStatusStr === '部分使用') &&
    data.canVerify

一个按钮 要是只有一个字段控制 就更好了,判断枚举也就算了,还和字符串判断混用
各种条件组合在一起,在各个前端都写一遍,还要保持一致。明显增加了风险。

框架的一些好处

0、容易上手。由于人员流动性大,知识密集,现在知识型组织很少,成熟的开源库有利于入门,文档也丰富。在需要找人临时帮忙写点东西的时候,就是错了影响范围也小。

1、保证了数据流正确。如果自由度太高,靠自己发挥就容易考虑不全面,随着业务的复杂、数据流程的失控,离奇bug让你崩溃。

2、良好的架构有优良的扩展性,在需要特殊处理、定制逻辑的时候,可以利用扩展接口实现,不会打乱现有逻辑。

3、包含了丰富最佳实践,好好了解架构后会发现:我之前写的轮子原来还可以这样写,真是“柳暗花明又一村”

4、感叹天外有人、山外有山,高山仰止,学无止境。保持学习的心态

解决了一个排查了两天的bug

最终通过注释一段5年前的代码解决了问题。过程如下
1、有人运营报问题说短信里请访问驴妈妈官网m.lvmama.com,点击打开页面不完整
2、然后通过Charles抓包排查,一旦连了代理就问题就好了。奇怪奇怪。
3、发现规律 5G网络页面一定不完整
4、联系配置排查,原来是ipv6的nginx缺失了配置http到https的部分。
5、修改nginx配置后,问题解决了。
6、下午又有人报酒店套餐详情H5页面打不开,app和小程序都是可以的
7、排查H5代码没有提交、后端接口正常。
8、本地调试页面正常访问,只有线上有问题,加了各种日志,也没找到问题
9、找人帮忙一起看,没办法只能注释代码了。ssr项目是服务端node渲染的。编译发布一次10分钟
10、经过一天的一点点注释代码发现一个post请求,发到线上后变成了get请求。
11、最终结论是由于解决上一个问题,修改ng导致的,解决方法是注释一段5年前的代码直接使用https,避免http重定向到https的时候post变成get请求。

总结:在前端、后端都没改动的情况下,出现问题尤其是ssr的项目,线上日志又不好查,需要重点关注配置的改动。

要分清首要作用

例如tabBar指示当前tab是首要作用。不要装饰得分不清当前是哪个tab。好的tabBar要不假思索的看出来才是好的。
对比下面两个感觉一下 image.png

image.png