當實作功能所有的過程都被拆解成Method後,應該要為每一個Method作定位。定義每個Method所處的Package、所處的Interface,思考時除了系統層面的Module定位(水平)之外,還要再考慮重用部分的定位(垂直),有的時候Method必須另外放置在特性描述的Interface。唯有把Method放置在多維空間的正確位置,才能在面對不同方向的切割時還可保有應有的功能。
Method裡使用的Data擺放也是需要定義的。在內部用完即丟的Local Variable、記錄Class狀態的Class Attribute、聚集成Package專用的Model Class或是定義在系統資訊區的Package,根據實際使用的狀況決定好放置的區域,才可以在適當的時候作正確的切割。(常數也是需要定義的Data)
reuse的想法除了把相同用途的Method或Data提取出來(同時要放置在應在的Package與層次)之外,也要包含在呼叫Interface Method時傳入參數就能變更內部處理流程的設計(需要定義更多類型的動作Method來支援);但是唯有盡量發揮這兩種設計特點,才能讓系統有更理想的最佳化。


在D06裡有張Component的內部結構圖,可以拿來作為定義Package結構的內容。只看與Package Interface有關的部分,從左邊開始正好依序對應為入口、流程與動作;這三者分開不同層次置放是為了與做事的本質對應,各自定義了Interface則是可以使用映射或是Design Pattern予以動態置換。
即使Method在Package內被拆解為入口、流程與動作三個部分,但是每個部分都是獨立存在,一樣是需要設計的。下面的例圖是UI Bean內的controller依照UI實際特性佈置的結構,最左邊是Interface,最右邊一排是Class,其餘中間的全部都是Abstract Class。在我所做的系統裡每一個Interface(不管是入口、流程、動作或Data Model)之下的Class全都是作出這樣的設計。

