jsonman"的内容
这个现象很普遍,我在另外一个帖子刚刚说了:http://www.jdon.com/jivejdon/thread/40397#23132732
如果使用OO的封装方法,即使有BUG,那么也被封装边界局限在小范围内,不会无限制扩大,软件测试才有一条清晰的路径,很多人把测试工程师吹得神乎其神,我这里不是贬低测试工程师,而是测试工程师如果测试得不是一个边界划分得很好的软件时,简直生不如死。
面向对象讲究松耦合,细粒度,这些都是最大化划定边界,然后还有大小边界的组合。
现在的JavaEE主流架构无论是Spring_Hibernate,还是EJB+JPA/DAO,其实都是面向数据库编程,这是本来有自然边界的业务对象被压扁到成毫无意义的扁平数据,存在数据库,虽然有数据表表结构这个边界,但是粒度太粗,而且表结构不能随着我们对业务深入认识划分细化,进行频繁切割或合并。
所以,用普通的类直接表达业务对象,也就是领域建模,DDD现在已经相当成熟,在.NET世界也得到大家认可,使用这样MDD模型驱动开发方式能够帮我们现实世界中的业务对象的自然边界延伸到计算机内存中,出了问题,一一对应也好找,测试人员测试起来方便轻松。
所以,如果一个软件测试很费时费力,不是测试工程师水平低,而是你的软件系统需要重构。
希望以上对你有所帮助。
banq"的内容
感谢banq的回复,领域建模是否就是将数据表表对象抽象成类对象,能否指导下如何做好领域建模。
一个是重构业务模型,把数据表模型转换成领域模型,可能要再次分析需求,重新整理画出类图,因为是从头来过,相当于重写。
第二个,是避开业务模型,避开数据表数据,只重构操作类,比如重构session bean或Spring的服务,将其粒度分细,分解它们,因为不涉及业务模型,所以,粒度细到一定程度就没有办法了。
在第二种基础上也有性能可伸缩性重构,就是shade碎片割分数据库,比如用户放一个数据库,产品放另外一个数据库,这样分解,有时会涉及到session bean或Spring的服务的分解。
总之,业务数据是一个软件系统的根,session bean或Spring的bean(XML中配置)是软件系统的叶,这颗树病了,根据你的能力从哪里下手。
jsonman"的内容
如果是DAO,那么就应当换起本来面目——数据访问接口对象,只单纯关注数据库的CRUD,也就是说不能掺杂任何业务逻辑,也不需要做复杂的变动,更不能在DAO方法上添加if else。
看楼主的状况,可能是不能满足业务需求了,那么就可以勇敢的废弃掉原来的系统,就像好公司采用激进策略时候,敢于将固定资产折旧。
需求因人因时不断变化,如何适应这些变化,如何使得这个适应变化的过程是收敛的、迭代的(系统在原来基础上“进化”以适应需求变化,而不是一有变动系统就要推倒重来)?这就考验编程者的智慧。OO抽象化的编程思想也由此应运而生。
hongs2001"的内容
hongs2001说的刀剑理论看似中庸和谐,实则我不敢苟同。我认为面向对象与结构化像是鸡头凤尾的关系,宁做陌生领域的“鸡头”,而不做熟悉领域的“凤尾”。这是由发展趋势决定的。
[该贴被showerxp于2011-04-05 09:27修改过]
[该贴被showerxp于2011-04-05 09:28修改过]