现在有一困惑,期望各位经验丰富兄弟给点比较实际的指点!
现状:做了几年Web开发,在web技术和数据库方面有一定的经验,但由于工作情况实战面向对象类的开发较少,对面向对象的理解有一些认识和理解,大方向的认识基本没啥问题。
困惑:在面向对象分析时的思路和广度感觉不太够,基本不是很复杂的问题也能梳理出各个对象,但在分析对象的方法或属性方面经验不足,有一些不能很好确定,特别是涉及到多个对象间存在信息需要修改时的处理方法和思路感觉没有好的方法或能较好处理好。举个例子(不一定很恰当哈,便于理解我的困惑):
比如有两对象 订单和客户,客户有个交易状态属性(当客户的订单处理完成后,状态就为关闭,否则为进行中),这个时候客户状态属性的改变怎么来实现更好呢?
1) 假如订单完成时,调用客户修改客户状态的方法?那么是否合适呢,是否修改状态的方法内部还需要有校验修改的状态是否符合数据逻辑。这样就变成了又要去校验其下的订单情况。
2) 如果订单完成时直接修改客户的状态?这样我估计肯定不行,违反了直接操作另一个对象的数据原则。
以上只是一个小例子。
期望:能够推荐一些这方面的资料和书,能帮助提升个人在这方面的分析识别能力!(经验是要慢慢积累,在积累的同时如果能有很本面的原理性或实际经验方面的教训功方法帮助,这个过程的效果可能会比较好)
推荐你看Eric Evans的《领域驱动设计》(DDD)这本书,非常经典,领域为中心的分析方法不仅在企业应用中,在分布式的互联网应用也非常广,可以Google一下Ebay的分布式架构ppt。
像你说的这个例子,单一的放在客户或订单中都不太合适,可能有个订购服务这样的对象会好些,领域驱动把这叫领域服务(要和应用层服务区分开来),比如银行业务中的转账,就属于这种类型,它是要和多个实体对象关联的核心业务逻辑,实体对象本身不宜混进太多非自有的业务逻辑,对于未来维护变更不好。
还有大师Martin Fowler的分析模式(Analysis Patterns)也是讲述OO分析的方法。
网上有很多讨论的四血模型也是关于对象模式的讨论可以看下也会有启发,另外就是上上Jdon,那里有很多大神可以请教。
可以用事件来解决。