程序是现实的映射,但程序要遵守“单一职责原则”,而现实对象是复杂的。
“一个人在家里对父亲尽到子女的职责,在公司对父亲尽到同事的职责,在不同场景下他的职责可能都有差异,而且完全没有止境”。如果完全忠于现实,那么人对象要实现所有的职责……不可能也不合理,在设计中这个类就称为无所不能的“上帝类”。上帝类是应该避免的。
解决这个矛盾的办法是什么?
1,创建一个无所不包的上下文
2,对象的职能 = factory.get(obj,ctx)
这样,将一个对象的职责向外委托,使得整个程序所有的对象都有可能是对象的资源,被对象所复用。以此来实现单一职责和无所不能的变化的统一。
这设计在框架中很常见
1,appplicationcontext:要感知整个应用环境
2,sessioncontext:感知回话上下文环境
3,threadlocal:当前线程
4,request:请求上下文
通过感知无所不包的上下文,对象的能力就被延伸了。一般在框架中,为了良好的扩展性会适用这种设计
另外,除了这个问题以外,上下文还需要解决循环依赖的问题。——在复杂架构中包含几种对象职责的划分
1,实体对象:外部数据和逻辑的抽象
2,领域对象:内部领域概念的抽象
3,值对象:内外变化的抽象
4,关系对象:多个对象之间关系和综合逻辑