让“锤子理论”适可而止

news/2024/7/4 8:56:14

“当你有一把锤子,你会把一切看成是钉子。”

        ——马斯洛

  技术人员经常会陷入“锤子理论”中。当掌握一门新技术,了解一门新框架,或者编写了一个插件,我们总是迫不及待的想大展身手,把这些新的东西,融入到产品中、项目中,或者自己的作品里,甚至很少会去想,它是否真的适合?

  昨天下午,在我的HoorayOS交流群里,和群友讨论图标拖动排序的原理,后面讨论到拖动结束后排序是否要改变dom结构,有人提了个不错的思路,就是不改变dom结构,只改变dom的top和left样式,实现排序更新,达到高效。

  无需质疑,这肯定是个好方法,并且当晚我就在考虑怎么将现有排序修改dom的模式换成新模式。然而在实际情况下,却有很多问题,比如,想要达到不修改dom必须保证dom元素必须是同辈的,如果将桌面图标拖动到文件夹,这种情况就无法处理。

  但我有新思路,就是当拖动的区域处于同个父级下时,采用不更新dom结构的模式,跨区域拖动依旧采用原有模式。问题又来了,如果不更新dom结构顺序,那就必须创建一个数组来记录图标的实际顺序,每次拖动结束后,更新数组,然后通知dom更新top和top。

  这时候,我不得不开始思考,这种模式是否真的适用?因为提供专属的解决方案只能解决某种特定环境下的拖动,如果这样操作,势必会提高维护的成本,同时也潜在的增加了代码的阅读体验。同一个操作为什么会有不同的处理模式,新手阅读代码会很困惑,这样我就必须花下足够的时间成本去讲解,让其明白其中的“奥妙”。在这几点的权衡上,我决定放弃。

  这件事过后,我就想到了“锤子理论”,还真是像,不过我很庆幸,我没有陷入。一把锤子,想解决所有问题,必然不可能。而我们要做的是,权衡这把锤子,它可能每下能敲3个钉子,但敲每下必须用出原先5倍的力气,这就需要我们自己来决定是否使用这把锤子了。

  架构师尤其要在这方面注意,因为每一步的举棋落棋,都影响着整个项目、产品的未来,不要盲目的去“为了解决问题而解决问题”。


http://www.niftyadmin.cn/n/4254522.html

相关文章

win10怎么打开计算机树形,Win10怎么让文件夹目录树以文本方式呈现?

Win10系统中,你所下载的歌曲是以歌手为文件夹建立的,你收藏了许多歌手的经典曲目,但在你翻看的时候却发现目录太多,需要一个个文件夹点进去寻找你需要的歌曲。怎么样可以更加有效的呈现你所有的曲目呢?如果让文件夹树以…

JavaWeb网上图书商城完整项目--day02-4.regist页面提交表单时对所有输入框进行校验...

1、现在我们要将table表中的输入的参数全部提交到后台进行校验&#xff0c;我们提交我们是按照表单的形式提交&#xff0c;所以我们首先需要在table表外面添加一个表单 <% page language"java" contentType"text/html; charsetutf-8"pageEncoding"…

虚拟机克隆如何调整计算机名,vSphere克隆虚拟机操作步骤

vSphere克隆虚拟机操作步骤疑问现象&#xff1a;相信使用过虚拟化的用户都清楚&#xff0c;VMWare ESXi5.0拥有很强大的功能&#xff0c;在vSphere5.0平台中使用ESXi经常会遇到这样的问题&#xff0c;用户需要建立多个虚拟机(以Suse操作系统为例)&#xff0c;但是一个一个安装耗…

截取access.log一段日志 和截取apache的访问日志ip

转发 评论 2011-12-09 18:43看到以前的一道shell面试题&#xff0c;心血来潮&#xff0c;看看自己现在能做了吗&#xff1f;&#xff01;小试一下…… 在access.log中截取 16/Aug/2010:14:31:30到17/Aug/2010:10:12:07间的日志信息&#xff0c;并输出到log.txt中&#xff0c;…

用T-SQL语句实现SQL server与XLS,MDB等文件的数据交换

第一部分:SQL server与ACCESS数据库的交换1. 在SQL SERVER里查询access数据: SELECT * FROM OpenDataSource(Microsoft.Jet.OLEDB.4.0,Data Source"c:/DB.mdb";User IDAdmin;Password)...表名2. 将access导入SQL server SELECT * INTO newtable FROM OPENDATASOURCE …

如何通过服务器实现监控远程,如何制作一个对流量进行远程监控的系统

描述步骤1&#xff1a;需要什么&#xff1f;这项工作需要&#xff1a;1 流量计 http&#xff1a;//pt.aliexpress.com/item/New-Black-G1-2-Wate 。..1 NodeMcu http&#xff1a;//pt.aliexpress.com/item/NodeMcu-Lua-WIFI-dev 。..或http&#xff1a;//pt.aliexpress.com/ite…

JavaScript中的call和apply应用

ECMAScript3给Function的原型定义了两个方法&#xff0c;他们是Function.prototype.call 和 Function.prototype.apply. 在实际开发中&#xff0c;特别是在一些函数式风格的代码编写中&#xff0c;call和apply方法尤为有用。 call和apply区别 其实他们的作用是一样的&#xff0…

SQL 复制过程的注意事项(转)

相关链接&#xff1a; 利用数据库复制技术 实现数据同步更新[摘] SQL 复制过程的注意事项(转) 1、设置共享复制目录: computer_machine//C$...//..如果服务器取消过默认的共享&#xff08;$)则会失败&#xff1b;此时新建一个目录&#xff0c;并赋予权限&#x…