首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将模板条件移出模板是不是一种糟糕的做法?

将模板条件移出模板是一种糟糕的做法。模板条件是指在模板中使用的条件语句,用于根据不同的条件展示不同的内容或执行不同的操作。将模板条件移出模板会导致以下问题:

  1. 可维护性下降:将模板条件移出模板后,条件逻辑将分散在不同的代码文件中,增加了代码的复杂性和维护难度。当需要修改条件逻辑时,需要在多个文件中进行修改,容易引入错误。
  2. 可读性降低:将模板条件移出模板后,模板的可读性会下降。开发人员需要在代码中查找条件逻辑,而不是直接在模板中看到条件语句,这增加了理解模板的难度。
  3. 代码重复:将模板条件移出模板后,可能会导致代码重复。如果多个模板需要相同的条件逻辑,开发人员需要在每个模板中重复实现相同的条件判断,增加了代码冗余。
  4. 难以维护和扩展:将模板条件移出模板后,对于模板的维护和扩展变得更加困难。当需要添加新的条件逻辑时,需要修改多个代码文件,容易引入错误。同时,对于已有的条件逻辑,也需要在多个文件中进行修改,增加了维护的复杂性。

综上所述,将模板条件移出模板是一种糟糕的做法。为了保持代码的可维护性、可读性和可扩展性,建议将模板条件保留在模板中,以便开发人员能够更方便地理解和修改模板的条件逻辑。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

通过邮箱发送html报表

前言 需求是发送邮件时, 可以报表正文贴到邮件里, 可以正常复制选中报表内容. 目前做法是简单粗暴转成了一张图片, 这样效果显然是很糟糕....那么报表是不是可以直接输出html到正文, 调用远程css呢. ? 尝试一: 外置css, js 把报表html中js, css都改成cdn地址, 直接单页访问html, 显示正常....尝试二: 内嵌css, js, 直接通过邮箱发送 finereport.css复制出来, 直接内嵌到html中. 1 2 h1{color:red}...试了下简单html, 可以正常发送接受, 收到也是富文本格式. 那么猜测是邮箱服务器限制了html大小, 毕竟直接简单粗暴把一个报表转成html, 内容会比较庞大....我们案例中用html体积大概350KB, 可能是因为这个导致通过api发送邮件被bang掉了.  尝试四: 精简html大小 简化了下模板, 只留了两个单元格.

2.4K90

加点JavaScript魔法

使用“悬停”模式时,只要你鼠标指针放在目标元素中,弹出窗口就会保持可见状态。当你移开鼠标时,弹出窗口消失。这具有糟糕副作用,即如果用户想要将鼠标指针移动到弹出窗口中,弹出窗口消失。...正如我上面提到,这会影响悬停事件行为,只要用户鼠标从链接移动到弹出窗口本身,就会触发“鼠标移出”事件。...回想一下之前添加逻辑,如果用户在触发鼠标进入事件之后一秒内鼠标指针移出触发取消弹窗逻辑。...现在剩下就是完善鼠标移出事件处理程序上删除弹出窗口逻辑。 如果用户鼠标移出目标元素,该处理程序已经具有中止弹出操作逻辑。...如果这些条件都不适用,那么这意味着弹出窗口当前显示并且用户正在离开target区域,所以在这种情况下,对目标元素popover('destroy')调用正确地执行移除和清理。

3.9K10

“逃离”单体,GitHub微服务架构实践

微服务 因此我们就想,是不是该从 Ruby on Rails 单体迁出,转向一种微服务架构了?如果是这样的话,我们该如何进行?单体架构和微服务架构各有所长。...这往往会导致分布式单体,这是最糟糕单体,同时也是最糟糕分布式。没有获得任何好处(比如,单独快速地向生产环境中部署一组特性),却还要应对微服务复杂性。...6数据拆分 正确地拆分数据是从单体架构转向 微服务 基础。这里稍微详细地介绍下 GitHub 做法。 首先,我们在现有的数据库模式中识别功能边界,并按照这些边界实际数据库表分组。...例如,我们特性标识,可以让单体开发者安心地新特性从测试环境转到生产环境,因为在这个过程中,他们可以通过这个标识控制谁能看到这些特性。助力工具转移出来,让开发人员在单体之外也可以使用这些工具。...它提供了现成 Kubernetes 模板,可自由使用 Ingress 负载均衡设置。它可以日志自动提取到 Splunk,并集成了我们内部部署流程。

53720

页面模板重构

我见过通过向模板传递 service 对象方式,再在模板里面通过 service 获取数据,这是糟糕做法模板要做事情需要保持清晰,不要耦合那些模型层业务逻辑。...这个实现方式有很多,比较常见是利用 Interceptor,一种数据处理成多种展现形式,在模板中就可以直接拿来使用,后文也会提到。...管理好模板数据上下文 说到模板数据上下文,就要提到模板变成页面的方式,最基本方式其实就是占位符(表达式)替换,也就是指定模板内容(字符串)中特定标记(子字符串)替换一下便生成了最终需要业务数据...静态引入也是一种常用准备数据方式,在 JSP 里就是: 用这种方式引入页面在编译时就会引入进来,里面的数据、包、类拿来即用。...我们经常根据最终呈现页面的特点,把页面划分成展示功能独立几个子页面,然后在需要位置引入进来,比如 JSP 动态引入: 还有一种方式对页面模板开发程序员更加透明

1.4K10

二分查找不同模板分析与比较

[mid] 是不是我们要找元素。...例如:找有序整数数组里第 1 个等于 target 位置(「力扣」第 34 题)。 一种常见做法是:看到 以后,继续向左边「线性查找」,此时时间复杂度变成 ,这里 是数组长度。...实际上正确做法是:在左边查找时候 继续使用二分查找。 这里代码大家可以做一下「力扣」第 34 题,我们今天主要解释大家看到几种写法差别。 3....相遇时候是 left == right,所以循环可以继续条件是 while (left < right)。...我用什么模板 我不固定用哪一种写法,看问题: 如果要找元素性质简单,可以在循环体内决定,我写成 while (lefy <= right),并且不设置 ans,因为循环体内就可以返回,没有必要设置 ans

77840

Chapter 5: Rvalue References, Move Semantics, PF

他们实际上是执行转换函数模板。std::move无条件把它参数转换成一个右值,而std::forward在特定条件参数转换成右值。...一种高级做法,使用标签分发方式(Tag dispatch) 传递const左值引用和传值方式都不支持完美转发,如果使用通用引用是为了完美转发,那就不得不使用通用引用,同时如果不想放弃重载,就需要在特定条件下强制模板函数匹配无效...这种做法核心是存在一个未重载过函数作为客户端API,然后任务分发到其他实现函数中。...但是,这种做法针对类构造函数不可行,因为即便构造函数写成标签分发函数,在其他函数中完成具体任务,但是有些构造调用也会绕过标签分发函数而转向编译器自动生成拷贝和移动构造函数。...另一种高级做法,限制(constraining)采用通用应用模板 为了在特定条件下,让函数调用发生在应该发生位置上,我们需要根据条件来启用/禁用模板匹配,方式是std::enable_if,如果内部判断条件

5.1K40

二分查找不同模板分析与比较

[mid] 是不是我们要找元素。...一种常见做法是:看到 4 以后,继续向左边「线性查找」,此时时间复杂度变成 O(N) ,这里 N 是数组长度。 实际上正确做法是:在左边查找时候 继续使用二分查找。...相遇时候是 left == right,所以循环可以继续条件是 while (left < right)。...我用什么模板 我不固定用哪一种写法,看问题: 如果要找元素性质简单,可以在循环体内决定,我写成 while (lefy <= right),并且不设置 ans,因为循环体内就可以返回,没有必要设置 ans...最后想和大家说 我短期之内不会频繁更新公众号了,很感谢大家关注和支持。 我写这个公众号原因是:以前我是干这个,写写题解,录题解视频,写公众号补充了一种知识分享形式。

53720

【原型设计】如何利用Axure实现下拉子菜单?

Step 6 接下来需要对菜单进行状态切换配置了,选择菜单【模板管理】,双击右边【鼠标单击时】。 ?...Step 9 此时预留效果,已经能将第一个菜单子菜单通过鼠标点击方式进行展开了。 ? Step 10 上面已经完成了点击鼠标把子菜单下拉出来效果,接下来我们需要配置鼠标移出菜单收起效果。...在右边栏【更多事件】中,选择【鼠标移出时】。 ? ? Step 11 按刚才同样方式进行配置事件。 ? ?...Step 12 截止目前配置,已经完成了第一个菜单下拉效果了:鼠标点击【模板管理菜单】会把子菜单展开,鼠标移出时,子菜单则自动收回。 ?...至此,我们就实现了下拉子菜单效果,当鼠标点击主菜单时,下拉出相应子菜单,当鼠标移出主菜单区域时,自动收起子菜单。 出品:嘉为科技

4.9K20

PHP没你想那么差

本文试着回答一些常见关于 PHP 断言,目的是向非技术人员解释,PHP 并不像许多人所说那么糟糕。 1它是不是鼓励糟糕实践? 不再是了。...而且,这些年来,一些糟糕实践是由缺失特性造成,导致了一些本不应该被允许事情被允许。现在大多数情况下,甚至不可能实现以前编写一些东西来导致这种声誉。 小结 它不再鼓励糟糕实践......通过使用框架避免了糟糕实践。 语言特性现在有很多讨论。糟糕特性不再受到支持。 PHP 添加了其他语言中存在大部分(即使不是全部)特性。 2它安全性是不是很差?...通过广泛使用模板系统(可以自动处理显示动态内容转义和安全问题),已经避免了由于直接在 PHP 中直接使用 HTML 所导致跨站脚本攻击(其中一个用户 JavaScript 脚本添加到要显示给另一个用户地方...通过使用自动加载程序(所有主流框架标配),避免了远程和本地文件包含。 通过使用模板语言作为标准或一种前端框架(例如 React),避免了跨站脚本(XSS)攻击。

41740

Vue.js前端开发快速入门与专业应用

v-show,用于根据条件展示对应模板内容,v-if在条件为false情况下并不进行模板编译,而v-show则会隐藏,v-if切换消耗要比v-show高,但初始条件为false情况下,v-if...子组件模板和模块中是无法直接调用父组件数据,所以通过props父组件数据传递给子组件,子组件在接受数据时需要显式声明props 组件名使用-分隔 可以使用v-bind动态传递数据给子组件,数字类型需要通过变量传递...,则会影响父组件状态,不管是不是单向绑定 C.组件间通信 1.直接访问,Vue.js中提供了三个属性对其父子组件及根实例进行直接访问,建议还是使用props传递 $parent:父组件实例 $children...2.父组件模板内容在父组件作用域内编译;子组件模板内容在子组件作用域内编译; 3....、webpack-simple、browerify、browerify-simple、simple 九、状态管理:Vuex 1.Vuex是状态管理模式一种实现库,主要以插件形式和Vue.js进行配合使用

2.8K20

基于AQS原理实现

) AQS主要作用 提供一个基于FIFO等待队列阻塞锁和相关同步器模板框架 对于阻塞锁和同步器实现子类,必须定义一个非对外访问helper class来继承AQS,利用AQS中受保护方法来为阻塞锁和同步器对外暴露方法提供服务...继承AQS同步器子类通过模板框架提供CAS操作state方式来保证原子性,以及volatile修饰保证可见性,这样能够实时知道当前对象获取锁或者释放锁所处状态信息 一般情况下,子类只会实现上述两种...= -3; // 仅用于共享锁,表示已经释放锁并已唤醒下一个阻塞节点线程状态 volatile int waitStatus; // 当前节点状态,初始化为0,不属于上述任何一种状态,属于可竞争获取锁状态...,业务线程可以创建对应条件来完成线程之间通信.即线程唤醒与等待,其核心要素如下: 自定义条件队列,即使拥有属性firstWaiter与lastWaiter 实现接口await/signal/signalAll...模板方法: acquire/release 具体实现方法: tryAcquire/tryRelease 共享锁资源接口 模板方法: acquireShared/releaseShared 具体实现方法

56020

一杯茶时间,上手 Django 框架开发

•name:可选,该路由名称,方便后续在模板中使用 我们刚刚写好 news 路由表接入全局路由表。...提示 如果你有过其他模板(或者类似技术)开发经验,例如 Jinja、EJS 或是 JSP 等,对 Django 模板会有一种似曾相识感觉。...注意:整个条件语句必须以 {% endif %} 结束,并且 {% else %} 是可选。 循环语句 循环语句用来在模板上展示任意长列表内容。...这里我们弄了些假数据,假装是从数据库里面取来。 再访问 localhost:8000,看一下我们首页是不是有内容了: ? 完美!...SQL 是用于访问和处理数据库标准计算机语言,但是直接写在代码里面显然难以维护,而且对使用者要求也非常高,写糟糕 SQL 代码查询效率非常低下。

1.5K21

对象池使用场景以及自动回收技术

不需要调用者在对象使用完成后,手动将对象归还给对象池,并且你可能要问: 针对不同类型Object,是不是可以用模板去实现更加通用实现一个对象池 构造函数参数列表,也可以是任意形式 自动回收对象池...: 这个对象重新放回到对象池....主要如下阐述: 因为我们需要把智能指针默认删除器改为自定义删除器,用shared_ptr会很不方便,因为你无法直接shared_ptr删除器修改为自定义删除器,虽然你可以通过重新创建一个新对象,把原对象拷贝过来做法来实现...而unique_ptr由于是独占语义,提供了一种简便方法方法可以实现修改删除器,所以用unique_ptr是最适合。...… 这种方式需要每次都创建一个新对象,并且拷贝原来对象,是一种比较低效做法。 但本人自己进行了思考,认为可以做到使用shared_ptr一样实现了高效自动回收机制。

1K40

设计模式| 行为型模式 (上)

避免使用多重条件,如果不使用策略模式,对于所有的算法,必须使用条件语句进行连接,通过条件判断来决定使用哪一种算法, 在上一篇文章中我们已经提到,使用多重条件判断是非常不容易维护。...为了提高代码复用性和系统灵活性, 可以使用一种称之为模板方法模式设计模式来对这类情况进行设计, 在模板方法模式中,实现功能每一个步骤所对应方法称为基本方法(例如“点单”、“吃东西”和“买单”...在模板方法模式中,可以将相同代码放在父类中,例如模板方法“请客”以及基本方法“点单”和“买单”实现放在父类中,而对于基本方法“吃东西”,在父类中只做一个声明,将其具体实现放在不同子类中, 在一个子类中提供...责任链模式适用场景 就像开始例子那样,假如使用if…else…语句来组织一个责任链时感到力不从心,代码看上去很糟糕时, 就可以使用责任链模式来进行重构。...总结 责任链模式其实就是一个灵活版if…else…语句,它就是这些判定条件语句放到了各个处理类中,这样做优点是比较灵活了, 但同样也带来了风险,比如设置处理类前后关系时,一定要特别仔细,搞对处理类前后逻辑条件判断关系

58820

【Vue原理】Compile - 源码版 之 generate 节点拼接

ast 拼接成 函数字符串(跟上面那个转换一样),而 ast 分为很多种,而每一种拼接方式都不一样,我们会针对每一种方式来详细列出来 下面将会讲这么多种类型节点拼接 静态节点,v-for 节点,v-if...想必应该知道 el.ifCondition 是什么了吧 简单说一下吧,el.ifCondition 是用来存放条件节点数组 什么叫条件节点啊?...比如 你有这样模板 [公众号] 像 上面的 p,span,section 三个节点都是条件节点,不会直接存放到父节点 children 中 因为并不是马上显示 然后他们解析得到 ast ,都会被存放到...,是这样 1、按顺序处理 ifCondition 中每一个节点,并且会移出数组 2、并且每一个节点使用 三元表达式 去拼接 3、递归调用 genIfConditions 去处理剩下 ifCondition...按下面的模板来说明一下流程 [公众号] 第一轮 ifCondition = p,span,section 获取 ifCondition 第一个节点,也就是p,并移出 ifCondition 数组

84130

高清ICON SVG解决方案(上) - 腾讯ISUX

1.多倍图片 目前用比较多做法是兼容devicePixelRatio = 2 就做实际图片大小两倍,devicePixelRatio= 3就做三倍,有些人可能会直接做3倍图片,这样就可以同时兼容...,如果占不到一个像素那就根据他占面积来降低这个像素灰度;占面积越小灰度就越低; 次像素渲染 次像素渲染是第三代渲染方式,相对来说比较高级,他从从左至右一个像素分成三份;用不同色彩值来显示图形...既然iconfont他是一个字体,就难逃出现锯齿命运,特别在Chrome下就是更加糟糕了,目前确实通过前端代码也是无法改变这个缺陷。...SVG是W3C制定一种二维矢量图形格式,也是规范中网络矢量图形标准。SVG严格遵从XML语法,并用文本格式描述性语言来描述图像内容,因此是一种和图像分辨率无关矢量图形格式。...1、由于绘制这个锁型图标时我们留下了一个单数列,会不会因为这样导致了他出现锯齿,如果是,那问题就来了,如果一定要左右对称或者每次画图都要铺满所有格子,这种做法不太现实,因为很多图标是不一定都全部能铺满

3.2K40
领券