Pattern Oriented Software Architecture
Page 39 为Layer pattern的layer指定service:需要遵循的一个重要原则是一个component不可以横跨多个layer, Layer N层使用的函数参数、返回值、错误类型信息等要么是编程语言的built-in 类型, 要么是Layer N层自定义的,要么来自一个多层共享的公共数据定义模块,决不能来自其它层的定义。
处于高层的Layer应该提供更多的service,反之较低层次的Layer要提供较少的service,整个层次结构像一个倒金字塔。(原因在于This is because developers should not have to learn a large set , of slightly different low-level primitives--which may even change during concurrent development.)
Page 40 为Layer pattern 的layer设计接口有三种策略,如果Layer N视 Layer N-1为黑箱,则我们需要为Layer N-1定一个一个flat interface , 可以实现一个Facade Object; 如果LayerLayer N视 Layer N-1为白箱,则Layer N 可以直接调用Layer N-1内部实现的所有方法, Layer N知道Layer N -1 实现了多少个component,且清楚地知道每个component实现了那些功能。
Page40 结构化某一个Layer: 如果一个Layer比较复杂,可以使用一些finer-grained pattern来帮助你组织它。比如:一个layer所提供的服务如果有多种实现方式,可以使用bridge pattern; 使用多个算法的layer可以使用Strategy pattern。