软件设计很容易出现两类问题,一是缺乏设计,二是过度设计。我认为设计软件不是一个人在一两天能够做好的,它是一种长期的动态的创造过程,因为需求的不稳定性与实现复杂度的隐蔽性迫使我们要经常做设计上的调整,所以敏捷开发讲的好,要分阶段开发,不要为未来做设计,让设计对目前的需求是最好的,让世界简单一点,当新的需求来了再做最优化的重构,使设计更进一步,能够适应新的需求。软件设计不单是技术问题,也包括了软件开发流程这种管理问题。
软件架构师不能一两天写个框架,然后拍拍屁股走人了,这种骨架一定是需要不断打磨,不断经过否定和质疑的锤炼,然后才能起到它该有的作用。正如各大企业的高管频频离职,或跳槽,或创业,或淘汰,没有最好的,只有最合适的。
IoC控制反转是一种好的设计目标,它的含义是高层不依赖底层实现,具体依赖抽象,具体对象由系统框架(IoC容器)提供,而不是程序的直接生成和调用。它代表了模块间的低耦合,可像搭积木一样灵活的配置,可重用。实现它的方法有多种,比如DI,比如Service Locator,这些都是技术层面的东西,而IoC本身是一种思想,一种设计原则,一种目标。
目前用的最广泛的是轻量级的IoC容器,有Spring.Net,Unity等,都很值得架构师去研究和应用。