项目背景
最近客户让我们添加了一个小功能。在客户登记入库信息的时候,可以看到仓库货架的存储情况,并提供货品位置选择功能。简单思考后,我大概花了三个小时将功能完成了,核心就是两层嵌套循环拼接小图片。下午展示给客户看到时候,客户说你忽略了一点仓库货架是三维的,还应该添加一个层的概念。我一想对啊,再加一层循环就可以了,回来在原来代码的基础上加了一层循环,再去给客户看。客户又说你们的配色不好看,我们需要自定义货品展示背景色……
每次仅仅是一个小的需求改变,就需要去改动很多源码,这既不符合设计原则,也没有形成模块化封装思想,更别提重构了!于是我就想,我来试试DDD。
我与DDD
第一次接触DDD大概是三年前在博客园看见netfocus 的BookLibraryExample,当时唯一的感觉就是他的代码好OO。那个时候刚刚才毕业的我,正在努力的用活动记录模式写三层,他的代码看的不是很懂,于是就放下了。后来自己在学习设计模式的时候,只言片语的也接触过。去年年底在学习写框架的时候看见了应用程序框架实战系列才在博主的带领下慢慢学习DDD。我目前的状态是为了领域而领域,因为这样可以让我的代码更加OO
上面都是废话,而且我还是标题党。说是DDD实战,其实就是用充血模型封装了一个控件而已,大家原谅责个……
需求分析
选仓库,展示货架,货架按货架编号排序,货架中分层显示出货品,货品按种子编号和坐标排序。该控件就是一个聚合,四个层次:货架列表控件,包含货架层控件 货架层控件包含货架行控件 包含物品控件;三个层次:货架列表控件,包含货架控件,货架控件包含货品控件。
经过两天的努力,现在编码已经完成,下面附上截图。没有美工界面有点丑陋,请大家自动忽视。
主要收获
这样子设计代码更加对象化,聚合的思想是把复杂度层层分解,让每一层都变得简单。原则就是一个层只操作自己的下级,下级再去操作下级,不能出现跨层操作,通过不同的对象之间协作来共同完成一个操作。 在这次尝试中我做到了:
- 每行代码没有超过15行
- 没有任何嵌套循环
- 没有跨层操作
结局是我老大说我这样做更加浪费性能,但是我心理想说的是我们追求不一样!
作者:Dynamic-xia
博客地址:http://www.cnblogs.com/dynamic-xia
声明:本博客以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
时间: 2024-10-07 09:08:17