Month: December 2008

我觉得JAVA语言应该新增一个“子类可见”的Access Modifier

   目前 "protected" 关键字代表 包可见和子类可见,但其实很多情况下,我们只希望提供子类可见,不提供包可见(比如 抽象类里的成员变量)。但JAVA没有提供这种Access Modifier,很遗憾。虽然我们可以通过其它办法来变通实现,但终归是很不方便。       

[对谈录]“让主角穿好衣服”究竟是演员的职责还是导演的职责?

    如果要让剧中的主角要穿上西服, 导演 会 让 主演 去干这件事, 那么在建模时,“穿衣服”到底算演员的职责,还是导演的职责呢? 关于这类问题的争论,可能是建模时争议次数最多的,而且争论双方一般都很难说服对方。      A: 穿衣服是演员的份内事(封装),而且不同的演员有不同的穿衣顺序(多态),导演不需要关心演员是怎么穿的,只需要演员能穿好衣服出镜就行了      B: 演员不过是导演的木偶(贫血者),具体怎么穿应该让导演来定(Transaction Script),尤其在当穿衣需要他人辅助时(数据库,JNDI 等资源),更加只有导演才能做好,因为导演才能调配这些资源(在Script中注入资源或通过工厂生成资源)      A:若演员穿衣需要调配其它资源,那的确应该让导演承担这个职责;否则的话,应该把把穿衣置为演员的职责,这样可以实现较好的封装和多态;否则的话,如果把这个职责丢给导演,那么,首先导演的封装性不太好,其次一个导演要实现所有演员的穿衣逻辑,这要造成较多的if/else(影响代码简洁性),或者要把导演本身进行多态设计(这一般不好做,因为导演的singleton被破坏,一些资源也不好处理,比如事务、AOP什么的)      B:话虽这样说,但是在我们公司的整体架构下,演员这种东西仅仅是数据结构,它是静态的,它不应该封装什么奇怪的算法;而导演才是动作者,导演才有权力干活。这样的设计思路更容易让人理解,并且这样做有利于维护我们系统设计风格的一致性!     A:  …….     B:  …….