好程序需要至少写两遍

[观点]好程序需要至少写两遍
 

导读:本文是从《Great code is written twice (or more)》这篇文章翻译而来。
 
文章内容如下:
 
最近这些年,越来越多的人开始转向敏捷开发。各种敏捷开发技术并不新鲜,大多是在80和90年代发展形成。但只是在最近这些年,程序员和(更重要的是)一些商业顾问,架构师,客户开始变得喜欢和拥抱敏捷开发。
 
进化中的需求
 
现在的一种普遍的认识是,在开始编码前,你不可能把所有的需求都写完备。这些需求的确定是一个逐渐发展进化的过程。使用短开发周期/springts,我们一步步的开发程序,使用多次迭代的方式完成从客户方得到的最新需求。这些都是基于一个进化的思想。就像生活中,我们总是通过一步步的改进来达到最好一样。
 
进化中的代码!
 
可是,这就完事了吗?如今大部分的程序员都认识到了需求必定是一步步的挖掘出来的。但他们却忘了自己的工作!?他们仍然认为他们的框架和架构在项目开始之初就定型了。同样,代码一旦写成,程序就完成了…不是吗?
 
错。以我的经验,所有好的程序都至少要写两遍。第一编是你过于仓促,不能很好的理解需求、实现需求。不错,当看到了某种业务模式,我们知道要提炼出方法,围绕着它实现业务职责。你最终写成的代码是非常好的,但,它不是优秀的。
 
在我们目前的项目中,几乎所有的重要功能模块都从头重写过数次。慢慢的但明显的,代码变得越来越好。一旦你对某段程序做了第三或第四次增补,或又找到了一个bug,你能感觉到这程序什么地方有异味。你开始躲避触碰这段程序,你为不需要在处理这段程序而高兴。当有了这样的感觉后我会怎么做?我会删了这些代码。
 
可是…可是…这样你就要完全从头开始了!?
 
你又错了!当然,IDE里空了,代码全没了,也许一些测试程序会存留下来。但你却对你的代码应该做什么有了扎实的认识。你也知道以前这段代码是什么样的,你知道它以前的内伤和异味在哪里!有了这些认识,你能写出更好,甚至是非常优秀的代码!不错,我们也可以保留这些代码,使用一些重构措施…但你可能再也找不到这样好的从头开始、更好的编写它的机会了。
 
再次,就像生活中的所有事情:要让事情变的完美,你需要经过多次的进化迭代。对你的需求是这样,对你的架构和代码也是如此。
 
写两遍,就意味着两倍的时间吗?
 
当告诉人们我的观点是所有的程序都至少写两遍时,他们担心花费两倍的项目时间。但事实远非如此。下面是原因:
 ?第二次写代码只是用去你初次写代码的很少一部分的时间。
?重写之后,代码的质量会有明显的提高,可维护性,可扩展性都有改善,包括编程的速度。
 
祝你好运,坚持重新改进你的代码!

<think>好的,我现在要帮用户解决微信小程序页面好后不显示内容且无报错的问题。首先,我需要回忆用户提供的引用内容,虽然这些引用可能不完全相关,但可能会有一些线索。比如引用1提到echarts不显示是因为项目结构的问题,引用2讨论了页面跳转的问题,引用3是组件不显示的示例。 用户的问题是没有报错但页面空白,可能涉及多个方面。首先,我应该考虑页面结构是否正确。比如,页面是否在app.json中正确注册,路径是否正确,大小是否匹配。因为引用2中提到过注册问题,虽然用户可能已经检查过,但还是要再确认一遍,包括路径中的斜杠和文件名是否正确。 接下来,检查WXML结构是否有闭合标签错误。比如,如果有一个未闭合的view标签,可能会导致整个页面不渲染,但有时候小程序可能不会报错。用户需要仔细检查标签是否正确闭合,特别是动态生成的部分是否有条件渲染的问题,比如wx:if条件是否永远为false。 然后,样式问题也可能导致内容不可见。比如,容器高度未设置,或者flex布局不正确,元素被挤出屏幕外。建议用户添加一些基本样式,比如设置view的高度,或者使用背景色来查看元素是否存在但不可见。 数据绑定是否正确也是一个点。如果页面依赖的数据未初始化或未正确加载,可能导致内容不显示。比如,在data中是否有初始值,或者异步数据获取后是否调用了setData。 基础库版本兼容性也需要考虑。如果用户使用的库版本过旧,可能会有兼容性问题,建议更新开发工具和基础库版本。 另外,缓存问题有时候会导致页面不更新,尝试清除编译缓存或者重启工具可能会有帮助。用户可能在多次修改后缓存没有及时更新,导致显示异常。 还要考虑组件引入是否正确。如果页面使用了自定义组件,需要在json文件中声明,并且路径正确。引用3中的组件可能因为没有正确引入而导致不显示,所以需要检查组件配置。 最后,真机调试和模拟器可能有差异,建议用户在真机上测试,排除模拟器的问题。同时,查看调试器的Wxml面板,确认元素是否被正确渲染,但可能被样式隐藏。 总结可能的步骤:检查注册、结构、样式、数据、缓存、组件、基础库,以及真机调试。需要逐一排查这些可能的原因,帮助用户找到问题所在。</think>针对微信小程序页面已编完成但内容不显示且无报错的问题,以下是可能原因及排查解决方案: --- ### 一、页面注册问题 1. **检查`app.json`注册路径** - 确认页面路径在`app.json`的`pages`数组中**完整且正确**,例如: ```json "pages": ["pages/home/home"] ``` - 注意路径大小敏感问题(Linux服务器区分大小),路径中避免使用中文或特殊符号[^2]。 2. **文件命名一致性** - 确保`.js`、`.wxml`、`.wxss`、`.json`四个文件**同名且在同一目录下**,例如: ``` /pages/home/ ├── home.js ├── home.wxml ├── home.wxss └── home.json ``` --- ### 二、WXML结构问题 1. **闭合标签缺失** 检查`.wxml`文件是否存在未闭合的标签(如`<view>`未闭合),可能导致整个页面渲染失败。 2. **动态渲染条件限制** 若使用`wx:if`或`hidden`控制显示,确保条件变量初始值不为`false`,例如: ```javascript // home.js data: { showContent: true // 初始值应为true } ``` --- ### 三、样式问题 1. **容器高度未定义** 若父容器未设置高度,内容可能无法显示。添加基础样式: ```css /* home.wxss */ .container { height: 100vh; background-color: #fff; /* 用于检测容器是否存在 */ } ``` 2. **布局冲突** 检查`flex`布局或`position`定位是否导致元素被挤出可视区域。 --- ### 四、数据绑定问题 1. **数据未初始化** 在页面的`data`中初始化渲染所需变量: ```javascript // home.js data: { title: '默认标题', list: [] } ``` 2. **异步数据未更新** 若通过接口获取数据,确保调用`setData`更新: ```javascript wx.request({ success: (res) => { this.setData({ list: res.data }); // 必须用setData触发渲染 } }) ``` --- ### 五、缓存与编译问题 1. **清理开发者工具缓存** 点击微信开发者工具菜单栏:`编译` → `清空缓存并重新编译`。 2. **重启开发者工具** 部分异常状态可能需重启工具或电脑解决[^1]。 --- ### 六、基础库兼容性 1. **更新开发者工具** 确保使用最新版微信开发者工具(至少v1.05+)。 2. **调整基础库版本** 在开发者工具详情中,将“基础库版本”设置为**2.16.0+**(过低版本可能不兼容新特性)。 --- ### 七、真机调试验证 1. **真机预览测试** 通过`真机调试`功能排除模拟器环境问题,部分API在模拟器中可能无报错但真机不执行。 2. **调试器Wxml面板检查** 在开发者工具中打开`调试器` → `Wxml`,查看节点是否正常渲染(即使页面显示空白)。 --- ### 八、组件引用问题(若含自定义组件) 1. **检查组件声明** 在页面的`.json`文件中声明组件路径: ```json { "usingComponents": { "custom-nav": "/components/NavHeader/NavHeader" } } ``` 2. **组件数据传递** 确保父组件向子组件传递了必需数据(如`title`属性)[^3]。 --- ### 典型场景案例 - **场景1**:页面容器高度为0 **现象**:页面空白,但`Wxml`面板可见节点。 **解决**:在根节点添加`height: 100vh`样式。 - **场景2**:`wx:if`条件初始值为`false` **现象**:动态内容不渲染且无错误提示。 **解决**:检查`data`中控制条件变量是否为`true`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值