编程道拓扑bcd.top 0x01/ 开局第一篇: 随便聊聊/ 随笔
0x01 开局
编程道拓扑(bcd.top)是一个前端从业者的思考和总结, 如果你喜欢, 欢迎关注!
作者是一个前端从业者, 本系列会总结作者在工作和学习中的一些思考, 会有具体的技术点, 也会有关于编程的一些鸡汤思考。 开局第一篇, 先来点思考!
编程道核心是什么
笔者观点: 复用世界, 但是不要复制自己
我现在的观点是, 编程就是复用, 复用别人的工作, 复用别人的经验,当然, 请不要简单的理解成 粘贴复制, 粘贴复制在笔者或者大部分的从业者看来应该都是没有什么技术含量的, 笔者这里的观点是, 要站在巨人的肩膀上。
复用这个世界
别人造好的轮子, 就要用起来,特别是流行的轮子, 比如说 lodash , rxjs 这种在github上start很多的轮子,把他们用在工作中, 事半功倍。当然, 肯定会有读者认为造轮子的才是大神, 用轮子的都是平庸之辈。您的观点前半段是对的, 造轮子的确实是大神, 但是用轮子的不一定是平庸之辈, 这些轮子使用者可以把大神的轮子用在自己的工作中, 迅速解决需求, 满足公司的业务, 这是很值得肯定的, 至少公司肯定了。况且如果没有众多的轮子使用者, 谁来称托造轮子的是大神呢。
不要复制自己 - do not repeat yourself
亲爱的读者, 您可以复用大神的轮子, 甚至复用整个世界, 但是 do not repeat yourself, 着里说的不要重复, 就是不要粘贴代码, 尽量不要再您的代码钟出现重复的代码, 所有编程语言发明了各种各样的技术, 让您可以复用自己的代码, 比如 变量(var) 方法(function) 类(class), 这些技术发明出来, 本质上就是给您复用您代码的工具
模块化
没有绝对正确, 只有相对合适
**
模块化也是为了复用, 但是模块化是一个双刃剑, 模块化是理想化的, 会让代码优雅, 可读性高, 但是在工作中,不一定适用。特别是前端。
模块化是好东西, 这个毋庸置疑, 但是在特殊场景下, 比如说后台管理系统开发层面, 刚好您在的团队人员流动比较强, 如果你模块化做的很细,有以下缺点:
- 当新人来接手代码的时候, 需要不断的跳转, 看起来很累
- 需要移植的时候, 要拷贝多个文件, 如果大部分逻辑在一个文件里面,那么只需要粗暴的拷走一个即可。
- 逻辑在同一个文件里面开发, 速度快
看吧, 这里细致的模块化就成了缺点。但是笔者需要再次强调, 模块化是一个很好的东西, 可以让您的代码组织更紧凑,也更优雅。但是也请记得, **没有绝对正确的技术, 只有相对合适的方案, **在必要时候, 我们也要做一些妥协和让步。
GET 请求url的处理
// solution 1
axios.get(`you/path/?para1=value1¶2=value2`)
// solution 2
axios.get({
url: "your/path",
params: {
para1: value1,
para2: value2
}
})
我们开上面的伪代码,两个方案的目的都是向服务器发送get请求, 第一种方案采用的是直接拼写完整的url, 第二个方案采用的是结构化的方案。
方案1的优点是只管, 就算刚入行的前端从业者, 也能知道这个药干嘛的, 方案二的优点是 结构化, 我们可以使用对象的方法, 和你方便的处理params, 而不是去处理这个字符串。丧失的就是直观。
再次抛出上节的观点, 没有绝对正确的技术, 只有相对合适的方案, 到底选那个, 看您的团队接收成都吧, 但是, 强烈建议, 要统一, 一个团队的风格要统一。
prototype 原型链上挂在方法
前端从业者, 肯定遇到过这种选择吧, 在原型链上挂在方法, 确实很香, 用起来特别顺手, 这里我们简单讨论一下吧
prototype 挂在方法 | import 方式引入 | ||
---|---|---|---|
使用便捷 | 毋庸置疑, 这种事方便的 | 需要单独引入, 再使用 | |
优化成都 | 无法做摇树优化 | 很方便左摇树优化(rxjs 为了左摇树优化, 后来的版本就取消了prototype挂在的方式) | |
侵入性 | 对全局有侵入性 | 没有 |
所有, 如果您挂在原型链上的方法很少, 不用考虑性能, 也不担心侵入性对其他实例的影响, 您可以放心大胆的选择原型链挂在的方法, 如果这些条件不满足, 那还是忘掉便利性, 使用import单独引入的方式吧。
注意: 笔者不建议在共有对象原型链上挂在方法, 比如在 Object Error Date 等对象上, 因为这个影响太大了, 您可以在您自己写的对象原型链上挂载, 或者三方流行lib上挂在, 比如 vue。
esm 使用风格
笔者在工作中发现部分同事不是很注重代码风格和统一性问题, 当然很多时候确实是太忙了, 没有时间注意这些, 下面是笔者建议的风格
import a from "a"
import { b1, b2 } from "b"
// variable block
// function block
// main logic
export default e;
export {
e1,
e2,
e3
}
- 导入始终在文件头
- 然后是依次是 变量 方法 主逻辑
- 导出统一放在文件末尾
站在大神的肩膀上
当使用大神们的轮子的时候, 尽量按照他们设计的方式去使用。
最近笔者的一个同事在使用element-ui(老版本) 的table的时候, 她希望在table外面有个过滤, 灵活的控制表格中行的显示与隐藏, 当时他一直想着能否把filter方法使用起来, 甚至想过要去更改element-ui的源代码, 但是在公司, 哪里有那么多时间去研究。
最后公司一个老同事给了一个方案,无研究成本解决问题。 不要想那么多, 直接修改传入el-table的的 数据, 不想显示的行, 直接去掉, 想显示的时候, 再插回来, 在去掉数据的时候甚至可以把该条数据当前位置记录下俩, 插回来的时候插回原来的位置, 效果更棒, 和tabel原生的方案更好。
当时笔者也想到一个方案, 那就是不要使用el-table, 自己定制一个组件,使用v-for循环列表, 然后再行数据里面加一个flag用于标识是否显示, 当不需要显示的时候, 直接修改改行的flag, 对数据的处理更少, 但是就要多一个组件,最快的还是老同事给的方案。
下一遍写什么
准备把笔者这些年遇到的好资源分享一下
编程道拓扑bcd.top 0x01/ 开局第一篇: 随便聊聊/ 随笔的更多相关文章
- client/scroll/offset width/height/top/left ---记第一篇博客
client/scroll/offset width/height/top/left (盒模型为contentBox,定位原点是元素左上角边框最外层的交点) clientWidth width+左p ...
- linux shell编程之变量和bash配置文件(第一篇)
编程语言有两类 强类型:如C语言.数据具有其特定的类型,先声明定义后才能使用.数据运算时必须符合类型要求(如不能把字符串类型数据直接与整型数据做算数运算) 弱类型:如shell.数据默认为字符型,不用 ...
- C#语法糖系列 —— 第一篇:聊聊 params 参数底层玩法
首先说说为什么要写这个系列,大概有两点原因. 这种文章阅读量确实高... 对 IL 和 汇编代码 的学习巩固 所以就决定写一下这个系列,如果大家能从中有所收获,那就更好啦! 一:params 应用层玩 ...
- 入园的第一篇--where、where
这篇是入园的第一篇随便,后面我会将自己几年前写的博文都转到这里.哎,其实说到博文的事情,我就很郁闷,甚至有些恼火,后面我会详细说说这中间的过程,也许能帮助某些人避免遇到类似的事情.突然想起<西游 ...
- 【转载】COM编程入门不得不看的文章 :第一部分 什么是COM,如何使用COM
原文:COM编程入门不得不看的文章 :第一部分 什么是COM,如何使用COM 原文:http://www.codeproject.com/Articles/633/Introduction-to-CO ...
- Python编程笔记(第一篇)Python基础语法
一.python介绍 1.编程语言排行榜 TIOBE榜 TIOBE编程语言排行榜是编程语言流行趋势的一个指标,每月更新,这份排行榜排名基于互联网有经验的程序员.课程和第三方厂商的数量. 2.pytho ...
- LINQ to XML LINQ学习第一篇
LINQ to XML LINQ学习第一篇 1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc ...
- Swing:LookAndFeel 教程第一篇——手把手教你写出自己的 LookAndFeel
本文是 LookAndFeel 系列教程的第一篇. 是我在对 Swing 学习摸索中的一些微薄经验. 我相信,细致看全然系列之后.你就能写出自己的 LookAndFeel. 你会发现 Swing 原来 ...
- 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变
在net中json序列化与反序列化 准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...
随机推荐
- 二叉堆(1)BinaryHeap
封装一个简单二叉堆,亦可视为优先队列. 测试文件 main.cpp: #include <iostream> #include "BinaryHeap.h" using ...
- 手写数字识别——利用keras高层API快速搭建并优化网络模型
在<手写数字识别——手动搭建全连接层>一文中,我们通过机器学习的基本公式构建出了一个网络模型,其实现过程毫无疑问是过于复杂了——不得不考虑诸如数据类型匹配.梯度计算.准确度的统计等问题,但 ...
- 401 WebEx会议教程一 —— 参加会议
· WebEx会议教程一 —— 参加会议 参加他人发起的会议 1. 在邀请邮件中,接受对方的会议邀请: 2. 一般在WebEx会议开始前15分钟时,邮箱客户端会提醒您 (如下图类似提示) 3. ...
- 改善深层神经网络(三)超参数调试、Batch正则化和程序框架
1.超参数调试: (1)超参数寻找策略: 对于所有超参数遍历求最优参数不可取,因为超参数的个数可能很多,可选的数据过于庞大. 由于最优参数周围的参数也可能比较好,所以可取的方法是:在一定的尺度范围内随 ...
- numpy学习(一)
(一)基础学习 学习渠道:阿里天池AI学习——Numpy基础(传送门) (二)练习篇 练习渠道:Numpy基础100题(Part 1) 1. Import the numpy package unde ...
- 搭建GithubPages静态博客踩过的坑
前言 搭建了属于自己的GitHub Page作为个人博客,上手Hexo+Material感觉比较花哨,后改用Yilia主题效果良好.期间发现并解决了一些问题,贴出值得记录的部分作为参考: 维护 书写 ...
- python3函数的参数
函数的定义能简化代码的逻辑,对于函数的调用者来说,只需要知道如何正确的传递参数,以及知道函数将返回什么值就可以了,而函数内部的复杂逻辑被封装起来,调用者不必了解. 位置参数 调用函数时,传入实参的值按 ...
- MySQL语法规范
不区分大小写(规范:关键字大写,表名列名小写) 每条命令用 :结尾 每条命令可以根据需要进行 缩进或换行. 最标准的模板: 关键字 对象 关键字 对象 注释:用于解释说明,编译器会自动忽略 单行注释: ...
- redhat 桌面系统配置
1.grouplist命令 yum grouplist 回车 2. yum groupinstall "GNOME Desktop" "Graphical Admini ...
- IntelliJ IDEA 2017.3尚硅谷-----创建动态的 Java Web