Java语言的代码扩散是什么意思?怎么避免代码的横向和纵向的扩散,代码扩散对于BUG产生的机制是什么造成的?有几个方面呢
代码扩散 是指代码的无序增长和蔓延,导致代码变得冗长、重复、难以维护和理解的现象。代码扩散通常出现在项目的演化过程中,特别是在没有良好的架构和设计规范的情况下。
横向扩散 是指代码的功能重复或相似性增加的情况,即同一功能的代码被写了多次。这可能是因为开发者没有利用合适的抽象和封装机制,使得代码缺乏重用性,导致功能模块重复编写。
纵向扩散 是指代码的层级结构深度和复杂性增加的情况,即代码的层次嵌套越来越深,函数或方法之间的依赖关系复杂化。这可能是因为缺乏合适的模块化和分层设计,导致代码结构不清晰、难以理解和维护。
代码扩散容易导致的问题
1 代码变得冗长、重复和混乱,使得阅读和理解代码的困难增加。
代码扩散会增加修改和调试的工作量,维护成本随之上升。
在扩散的代码中引入错误或遗漏的可能性更高,从而增加了引入 Bug 的风险。
4 冗长和重复的代码通常效率较低,可能影响程序的执行速度和资源消耗。
不知道你这个问题是否已经解决, 如果还没有解决的话:青年:新产品中的监测模块每天会生成新的监测数据,对于这些监测数据可提供word文档下载。按理说用poi是可以解决的,但是目前的痛点在于,监测数据的种类很多,每种监测数据的word模板也各不相同,并且在将来文档模板内容以及排版样式还会有变化。使用poi的方式,会使工作量剧增,将来扩展也存在很大的问题,大师你看该怎么办?
禅师:这个问题很有意思,目前生成文档的主流方式确实是使用poi。针对你的这种特殊需求确实需要就事论事,我的建议使用freemarker模板生成word。
青年:freemarker是模板引擎,他是把由模板语言写成的模板生成文本文件,思路上是符合需求的。只要在word文档中需要展示的数据用模板语言标记即可,可是问题是freemarker可以把word模板直接生成word文件吗?我的word模板如图:
禅师:肯定不能把word模板直接作为freemarker的模板生成word的。需要把word模板另存为xml文件,用这个xml文件作为freemarker的模板生成word,如图:
我给你一个(demo-mydoc点击下载),只要在template文件夹下放入这个xml模板,运行Test.java文件就可以。
青年:大师,出问题了,我严格按照你的要求运行时发生了如下的错误:
freemarker.core.ParseException: Parsing error in template "company.xml" in line 3, column 20887:
Encountered "<", but was expecting one of:
<STRING_LITERAL>
<RAW_STRING>
"false"
"true"
<INTEGER>
<DECIMAL>
"."
"+"
"-"
"!"
"["
"("
"{"
<ID>
at freemarker.core.FMParser.generateParseException(FMParser.java:4672)
at freemarker.core.FMParser.jj_consume_token(FMParser.java:4543)
at freemarker.core.FMParser.UnaryExpression(FMParser.java:340)
at freemarker.core.FMParser.MultiplicativeExpression(FMParser.java:452)
at freemarker.core.FMParser.AdditiveExpression(FMParser.java:402)
可是我有时模板中只有一个参数的时候,比如name,就可以正确的显示,一旦多个参数的时候就报错,甚至有时重写一遍模板,哪怕只有一个参数{name},就可以正确的显示,一旦多个参数的时候就报错,甚至有时重写一遍模板,哪怕只有一个参数name,就可以正确的显示,一旦多个参数的时候就报错,甚至有时重写一遍模板,哪怕只有一个参数{name}的时候也报错,怎么会时而可以运行时而报错,像躲迷藏似的,确实让人抓狂,大师能不能指点一二。
禅师哈哈一笑后说:年轻人写代码的时候要有耐心,尤其在程序报错的时候更要加倍耐心。我们可以看到报错的原因是因为:freemarker.core.ParseException: Parsing error in template “company.xml” in line 3, column 20887,肯定是模板解析出现问题,也就是解析没成功呗,给你一个查看xml的工具(firstobject xml editor点击下载),看看模板变量是否有问题。
青年用firstobject xml editor工具打开模板文件,按F8格式化,双击左边w:body,定位到该标签如图:
在<w:body>中果然看到问题所在:${name}被<w:r>分隔成了若干块,如图:
这种情况下,freemarker是解析不出模板命令的,改正做法就保留一个完整的<w:r>${name}</w:r>,其余的都删除,如图:
其余的模板命令以此类推。然后把xml模板放到demo中,运行得到如图结果:
禅师:干的不错,看来问题就出在了word模板另存为xml模板的时候,这应该是word软件的一个bug。
青年:感谢大师,现在心情舒畅多了!
总结:
1.word模板另存为xml文档,由于word软件本身的原因,会把模板命令比如$(“name”)分隔成若干块,导致freemarker无法解析。
2.需要用firstobject xml editor工具查看xml模板,手动修改,保留完整的模板命令块。
3.将手动修改好的xml拷进demo中,可成功运行。
4.xml格式的word换行标记<w:br/>