编程道拓扑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语法规则 ...
随机推荐
- matplotlib数组转图片的一些坑
最近用matplotlib遇到了一些坑,记录一下. 图片转数组 import matplotlib.pyplot as plt im_file='test_image.jpg' img=plt.imr ...
- 爬虫学习笔记2requests库和beautifulsoup4库学习笔记
目录 1.requests库 1.1 安装 2.beautifulsoup4 2.1 常用方法 2.2 bs4 中四大对象种类 2.3 遍历文档树 2.4 搜索文档树 查询id=head的Tag 查询 ...
- Python之路Day11
函数名的第一类对象及使用 当作值,赋值给变量 def func(): print(1) print(func) #查看函数的内存地址 a=func print(a) a() 可以当作容器中的元素 de ...
- js获取URL里的参数
第一种 通过正则获取URL中指定的参数 /** * 获取指定的URL参数值 * URL:http://www.xxx.com/index?name=123 * 参数:param URL参数 * 调用方 ...
- C++常用字符串操作和UTF-8和GBK之间的转换以及判定(转)
编码转换原文地址:https://www.cnblogs.com/Toney-01-22/p/9935297.html C++字符串常用操作:C++ 中字符串查找.字符串截取.字符串替换
- Python复制指定目录的各个子目录下的同名文件到指定文件夹并重命名
Python复制指定目录的各个子目录下的同名文件到指定文件夹并重命名 #编码类型 #-*- coding: UTF-8 -*- #导入包 import os import shutil srcpath ...
- AE创建组件失败,项目中已存在对esri.arcgis.***的引用
AE创建组件失败,项目中已存在对esri.arcgis.***的引用 解决办法:在解决方案资源管理器的引用中把错误提示中的引用删掉,再创建组件就没问题了.
- 网易云信融合CDN方案及实践
日前,网易云信视频云架构师席智勇在第七届GFIC全球家庭互联网大会进行了题为<网易云信融合CDN方案及实践>的分享,以下是演讲内容回顾. 图为 网易云信视频云架构师席智勇 CDN所面临的问 ...
- [CF755B] PolandBall and Game - 博弈论
[CF755B] Description 两个人轮流说单词,每个人只能说自己的的单词库里的单词.被任意方说过的单词不能再说.一个单词只会在某个人的单词库中出现一次,但是可能同时出现在两个人的单词库中. ...
- php curl 发起get和post网络请求
curl介绍 curl是一个开源的网络链接库,支持http, https, ftp, gopher, telnet, dict, file, and ldap 协议.之前均益介绍了python版本的p ...