当你纠结某个问题很难解决的时候,很可能是你的设计出了问题

不知道你有没有遇到过这样的场景,业务逻辑很清晰,但是代码实现异常困难,然后上网求助加班。


其实,这种情况,通常意味着你的设计出了问题,一般遇到这种问题,包括我的程序员,我都建议暂时把代码放一放,喝杯茶,重新审视自己的思路,这一点我感受很深。


我第一次做病区的医嘱管理程序,客户要求支持续打,这个问题的难度在于,它不是一般的续打,例如银行存折打印就是原来打到了第三方,这次要从第四行打印,医嘱的续打特别变态,比如我打印了30行医嘱,后来第一页第三行医嘱作废,续打程序要求在第一页第三行叠加打印删除线,当时直接就懵逼了,这个问题深深的困扰了我几天时间,终于恍然大悟,重新设计了打印过程:

1.执行一个虚拟打印过程,打印全部医嘱到一个XML文件YZ.XML中,XML文件的结构这样定义示例如下

<pages>

  <page num=“1” >

     <line num=“1” context="青霉素 ivgtt bid " deleted="0"/>

    <line num=“2” context="葡萄糖 ivgtt bid " deleted="1"/>

  </page>

.....

</pages>

2.提取上次的XML文件,逐行对比,生成差异文件 DYZ.XML,结构同YZ.XML,但是相同部分被删除

<pages>

  <page num=“1” >

    <line num=“2” context="青霉素 ivgtt bid " deleted="1"/>

  </page>

.....

</pages>

3.执行真正的打印过程,该过程根据DYZ.XML打印,打印过程中提醒用户放第几页纸张

4.打印结束后,保存YZ.XML以便下次使用


这样设计后,程序书写异常简单,一天完工。


再举一个例子,关于数据排序问题,估计很多人遇到过,就是某些数据需要手工排序,并记忆顺序,按道理很简单,添加一个顺序字段,人工指定一个顺序号,以后取数据:

select * from TableA order by 顺序号

看起来很简单,我曾经也这么做过,可是后来发现,如果我要调整顺序,去异常艰难,比如我把最后一个改成第一个,如果一个表有几万条记录,就必须改写所有的记录的顺序号,这个问题困扰我很久,直到有一天豁然开朗,把顺序字段改为浮点型,问题迎刃而解,如果某条记录调整到N和N+1行中间,这条记录的顺序直接取第N行数据和N+1行数据顺序号的平均值即可,避免了其它记录的修改。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值