微信网站是多少钱一年朝阳建设工程

news/2025/10/8 5:42:16/文章来源:
微信网站是多少钱一年,朝阳建设工程,哪些网站可以查企业信息,外包公司网络安全管理制度#x1f308;个人主页: 鑫宝Code #x1f525;热门专栏: 闲话杂谈#xff5c; 炫酷HTML | JavaScript基础 ​#x1f4ab;个人格言: 如无必要#xff0c;勿增实体 文章目录 【翻译】再见, Clean Code!正文那是一个深夜次日早晨这只是一个阶段 【翻译】再见… 个人主页: 鑫宝Code 热门专栏: 闲话杂谈 炫酷HTML | JavaScript基础 ​个人格言: 如无必要勿增实体 文章目录 【翻译】再见, Clean Code!正文那是一个深夜次日早晨这只是一个阶段 【翻译】再见, Clean Code! 这篇文章翻译于React核心开发者Dan的这篇博客。 原文链接overreacted.io/goodbye-cle… 正文 那是一个深夜 我的同事刚刚提交了他们整个星期一直在编写的代码。我们正在开发一个图形编辑画布他们实现了通过拖动矩形和椭圆等形状边缘的小手柄来调整其大小的功能。 代码能正常运行。 但显得很冗余。每个形状如矩形或椭圆拥有各自不同的手柄集合而拖动手柄的不同方向会以不同的方式影响形状的位置和尺寸。如果用户按住 Shift 键我们还需要在调整大小时保持形状的长宽比。涉及了大量的数学计算。 代码大致如下 let Rectangle {resizeTopLeft(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math},resizeTopRight(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math},resizeBottomLeft(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math},resizeBottomRight(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math}, };let Oval {resizeLeft(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math},resizeRight(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math},resizeTop(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math},resizeBottom(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math}, };let Header {resizeLeft(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math},resizeRight(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math}, }let TextBlock {resizeTopLeft(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math},resizeTopRight(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math},resizeBottomLeft(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math},resizeBottomRight(position, size, preserveAspect, dx, dy) {// 10 repetitive lines of math}, };那些重复的数学运算令我颇为烦恼。 代码不够整洁。 大部分重复出现在处理相似方向的函数之间。比如Oval.resizeLeft()和 Header.resizeLeft() 就有相似之处因为它们都涉及拖动左侧的手柄。 另一类相似性存在于处理相同形状的所有方法之间。例如Oval.resizeLeft() 与其它 Oval类的其他方法也有共通之处因为它们都是围绕椭圆进行操作。同样Rectangle、Header 和 TextBlock 之间也存在一些重复因为文本块本质上就是矩形。 我有了一个想法。 我们可以这样对代码进行归类从而消除所有重复: let Directions {top(...) {// 5 unique lines of math},left(...) {// 5 unique lines of math},bottom(...) {// 5 unique lines of math},right(...) {// 5 unique lines of math}, };let Shapes {Oval(...) {// 5 unique lines of math},Rectangle(...) {// 5 unique lines of math}, }然后组成他们的行为 let {top, bottom, left, right} Directions;function createHandle(directions) {// 20 lines of code }let fourCorners [createHandle([top, left]),createHandle([top, right]),createHandle([bottom, left]),createHandle([bottom, right]), ]; let fourSides [createHandle([top]),createHandle([left]),createHandle([right]),createHandle([bottom]), ]; let twoSides [createHandle([left]),createHandle([right]), ];function createBox(shape, handles) {// 20 lines of code }let Rectangle createBox(Shapes.Rectangle, fourCorners); let Oval createBox(Shapes.Oval, fourSides); let Header createBox(Shapes.Rectangle, twoSides); let TextBox createBox(Shapes.Rectangle, fourCorners);代码的总大小减半重复的部分也完全消失了如此整洁。如果我们想要改变某个特定方向或形状的行为我们可以在一个地方进行修改而不是到处更新方法。 已经是深夜了我太投入了。我将我的重构代码提交到了主分支然后去睡觉了为自己解开了同事混乱的代码而感到骄傲。 次日早晨 ……并未如我所料。 上司找我进行了一次单独交谈委婉地要求我撤销那次修改。我惊愕不已。旧代码一团糟而我的代码整洁明了 尽管心有不甘我还是照做了。然而我花了好几年才意识到他们是对的。 这只是一个阶段 对“清洁代码”痴迷、热衷于消除重复是我们许多人必经的一个阶段。当我们对自己的代码缺乏信心时往往会将自己的自我价值感和职业自豪感寄托于那些可度量的事物上。一套严格的代码风格规则、一种命名方案、一种文件结构、对重复的零容忍…… 虽然无法完全自动化地消除重复但随着练习这一过程会变得愈发容易。通常情况下每次修改后你都能判断出代码中的重复是增多了还是减少了。因此消除重复仿佛是在提升代码某个客观指标给人以成就感。更糟糕的是它还会影响人们的自我认知“我是那种编写清洁代码的人”。这种错觉具有极强的迷惑性。 一旦我们掌握了创建抽象的能力就很容易对此上瘾只要看到重复的代码就会迫不及待地从中抽离出抽象。经过几年编程历练我们会发现到处都是重复——而抽象化正是我们的新超能力。如果有人告诉我们抽象是一种美德我们会欣然接受并开始评判他人不崇尚“清洁”。 我现在明白那次所谓的“重构”在两方面都是一场灾难 首先我没有与原作者沟通。我在没有征得他们意见的情况下重写了代码并提交。即便这算是一种改进我现在已不再这么认为这种方式也极其糟糕。一个健康的工程团队始终在建立信任。未经讨论就擅自重写队友的代码将严重损害你们在代码库上的协作效率。其次没有什么是免费的。我的代码牺牲了应对需求变更的能力换取了减少重复但这并非一笔划算的交易。例如后来我们需要为不同形状的不同手柄添加许多特例和行为。若沿用我的抽象设计实现这些变更会复杂数倍而若是采用原先“杂乱”的版本这些改动则轻而易举。 那我是否在建议你应该编写“脏”代码呢并非如此。我想强调的是当你谈论“清洁”或“脏乱”时应当深入思考其含义。这些词语会让你产生反感、正义感、美感或是优雅感吗你能否确切指出这些品质所对应的工程成果它们又是如何具体影响代码的编写与修改方式 我当初的确未曾深入思考这些问题只是过分关注代码的外观却忽视了它在一个由充满变数的人类组成的团队中如何演变。 编程是一段旅程。想一想从写下第一条代码至今你已走了多远。第一次体验到通过提取函数或重构类让复杂代码变得简洁想必令你欣喜不已。如果你对自己的技艺引以为豪追求代码清洁自然颇具吸引力。那么就先这样做一段时间吧。 但切勿止步于此。不要成为清洁代码的狂热信徒。清洁代码并非目标而是我们在面对系统无尽复杂性时试图理清头绪的一种手段是在面对未知领域、不清楚某项改动会对代码库产生何种影响时的导航工具。 让清洁代码指引你然后适时放下它。 个人感言clean code固然重要但不可过度封装‍♂️。

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

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

相关文章

2014网站设计趋势北京 高端网站定制

文章目录总结题目update(solution of T3):代码230pts100100300总结 不要先入为主!如果某种算法受阻,要尝试一下别的路子!! 本次的主要问题: T2花费时间略长(指2h&#…

做网站需要几个程序怀化住建部网站

作者简介闫亮 Intel高级软件工程师专注于开源存储SPDK的测试和优化简介CONTENTSSPDK virtio模块介绍SPDK virtio 用户模式使用示例SPDK virtio PCI模式使用示例总结第一章SPDK virtio模块介绍众所周知,Virtio协议定义了两个块设备驱动,virtio-blk和vi…

AI元人文理论体系研究:从基石重构到文明共生——声明Ai研究

AI元人文理论体系研究:从基石重构到文明共生 一、引言:AI元人文的崛起与挑战 人工智能正经历从工具理性向价值理性的深刻转变。随着生成式AI技术的持续进步,人文研究的数字人文范式正在向"AI人文"转型 。…

湖北省两学一做网站方象科技的企业愿景

前置知识&#xff1a;RNN&#xff0c;LSTM/GRU 提出背景 Attention模型是基于Encoder-Decoder框架提出的。Encoder-Decoder框架&#xff0c;也就是编码-解码框架&#xff0c;主要被用来处理序列-序列问题。 Encoder&#xff1a;编码器&#xff0c;将输入的序列<x1,x2,x3……

潍坊市建设监理协会网站电子商务网站建设与管理 教案

1、了解事务吗&#xff0c;MySQL中事务的隔离级别有哪些&#xff1f; 读未提交&#xff1a;一个事务还没提交时&#xff0c;它做的变更就能被别的事务看到。读已提交&#xff1a;一个事务提交之后&#xff0c;它做的变更才能被其他事务看到。可重复读&#xff1a;一个事务执行过…

在建设银行网站能换美元吗株洲营销型网站建设

本篇文章&#xff0c;笔者将详细介绍食堂采购系统从需求分析到上线实施的完整过程&#xff0c;旨在为开发团队和管理者提供一个系统化的指南。 一、需求分析 1.用户需求 常见的需求包括&#xff1a; -采购计划管理 -供应商管理 -库存管理 -成本控制 -报表生成 2.系统功…

最好的网站模板下载网站微信上的小店微商城怎么开通

应群里同学要求&#xff0c;总结一下我自己的复习经历&#xff0c;希望对大家有所借鉴&#xff0c;报考国防科技大学&#xff0c;专业课831信号与系统140&#xff0c;总分410&#xff0c;大家以前一直认为国防科技大学时军校&#xff0c;从而很少关注这所军中清华&#xff0c;现…

网站开发是前端还是后端自己做的网站怎么发布上

近年来&#xff0c;区块链技术作为金融科技的中坚力量&#xff0c;受到了产业界的热切关注&#xff0c;其实验开展和应用研发正在如火如荼的进行。 在此背景下&#xff0c;各地涌现出一大批优秀的企业投入到区块链产业中&#xff0c;各类企业投融 资活动十分活跃&#xff0c;充…

图文网站源码北京营销策划有限公司

插入排序 1. 算法思想&#xff1a; 由数组下标为1 开始的数值作为判断依据&#xff0c;与之前的数据从后往前比较定义tmp 暂存判断的数值&#xff0c;若前面的数据大于tmp&#xff0c;则将前面的数据向后移动 : arr[j1]arr[j]若对比的数据比tmp 大&#xff0c;则往后移&#…

网站开发员岗位职责2017国办网站建设规范

/* 关于基本数据之间的互相转换&#xff1a;转换规则 1、八种基本数据类型中**除布尔类型之外**剩下的7种类型之间都可以互相转换2、小容量向大容量转换&#xff0c;称为自动类型转换&#xff0c;容量从小到大排序如下&#xff1a;-byte<short<int<long <float<…

wap网站cms恋月wordpress

开源鸿蒙轻量系统源码分析 作者将狼才鲸日期2024-03-28 一、前言 之前单独的LiteOS是通过Makefile编译的&#xff0c;当前的开源鸿蒙LiteOS-M和LiteOS-A是通过gn和ninja编译的。 Gitee官方只介绍了LiteOS-M的gn ninja编译的流程&#xff0c;针对M3使用Keil编译的流程可能要参…

网站建设项目单子来源网页设计与制作教程psd格式

minio客户端基本操作 桶 创建桶 如果要创建新的桶 输入名称&#xff0c;点击创建即可&#xff0c;默认权限就行 删除桶 点击要删除的桶 点击删除 修改桶 如果哪天需要修改桶的权限或者其他信息&#xff0c;还是先点击这个桶进入详情 然后点击要修改的属性&#xff0c;选择…

品牌网站建设价格天天快递qq代挂主站网站建设

对象池是一种设计模式&#xff0c;用于管理和重用对象&#xff0c;以提高性能和资源利用率。对象池的概念在许多应用程序中都有广泛应用&#xff0c;特别是在需要频繁创建和销毁对象的情况下&#xff0c;例如数据库连接、线程、HTTP连接等 对象池通过预先创建一组对象并将它们存…

wap建站模板网站qq访客 原理

与Cookie不同&#xff0c;会话数据存储在服务器上。会话是客户端登录到服务器并注销的时间间隔。需要在此会话中进行的数据存储在服务器上的临时目录中。 与每个客户端的会话分配一个会话ID。会话数据存储在cookie顶部&#xff0c;服务器以加密方式签名。对于这种加密&#xf…

电子商务网站建设是学什么酒泉地网站推广

rk3568 适配以太网——RTL8211 千兆以太网(Gigabit Ethernet)的传输速度为1 Gbps(千兆位每秒),而百兆以太网(Fast Ethernet)的传输速度为100 Mbps(百兆位每秒)。因此,在相同的网络条件下,千兆网可以提供更高的数据传输速率,比百兆网快10倍。千兆网的更高传输速度使…

有一个专门做演讲的网站会讯通2022官方下载

1.备份和还原vSphere Distributed Switch配置 1.1导出 vSphere Distributed Switch 配置 可以将 vSphere Distributed Switch 和分布式端口组配置导出到某一文件。该文件保留有效的网络配置&#xff0c;使这些配置能够传输至其他环境。 步骤&#xff1a; 1) 在 vSphere Web Cli…

佛山网站建设公司88电子商务网站建设运营

文章目录 一、简介二、基本概念三、装饰模式的结构和实现类图解析&#xff1a;装饰器的实现方式继承实现&#xff1a;组合实现&#xff1a;继承和组合对比 四、装饰模式的应用场景五、与其他模式的关系六、总结 一、简介 装饰模式是一种结构型设计模式&#xff0c;它允许动态地…

用dw做的网站怎么上线iis7部署网站

声明&#xff1a;以下这函数&#xff0c;使用场景再lambda表达式中使用 std::weak_ptr<websockets_session> weak_self() { return std::weak_ptr<websockets_session>(shared_from_this()); }

网站开发培训深圳网站设计包括哪些内容

背景 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题&#xff0c;在用户体验至上的今天&#xff0c;解决好应用的性能问题能带来非常大的收益。Java 作为最流行的编程语言之一&#xff0c;其应用性能诊断一直受到业界广泛关注。可能造成 Java 应用出现性能问题的因…

北京移动端网站设计二建证书查询官网入口

编写equals()和hashCode()方法需要遵循以下原则&#xff1a; 1. equals()方法&#xff1a; - 使用instanceof关键字检查传入的对象是否为当前类的实例。 - 检查传入的对象是否为null。 - 检查传入的对象的类型是否与当前对象的类型相同。 - 比较对象的属性是否相等&#x…