Directiveを切り分けたい / AngularJS

Windowsの付箋みたいなDirectiveを作ろうとしている。で、DnDができるようになるDirectiveをこの間作って、じゃあそれに機能追加をしよう!って思ったんだが、それをするとDirectiveが肥大化する。
だもんでDirectiveを分割したいなと思って、はじめのうちはDirectiveからServiceを呼び出せばいいのでは?と思ったんだけれど、メジャーなDirectiveの書きかたはそうじゃないっぽいので調べているところ。

今参考としているDirectiveはこれ。これもどうやらこれを参考にしている気がする。 Serviceは1個あるけどやっぱりDirectiveが複数にわかれているのがわかる。

DirectiveとDirectiveの連携ってどうやんの?

DirectiveとDirectiveは独立しているし、Serviceを使って値渡しをしているようには見えない。uiTreeNodeのソースを読んでいくと、気になる構文がある。

if (eventScope.$type != 'uiTreeNode'  
                && eventScope.$type != 'uiTreeHandle') {
                // Check if it is a node or a handle
                return;
}
if (eventScope.$type == 'uiTreeNode'  
                && eventScope.$handleScope) { 
                // If the node has a handle, then it should be clicked by the handle
                return;
}

これはEventがあったObjectが
「uiTreeNode(付箋)でもuiTreeHandle(ハンドル)でもない場合」か
「uiTreeNode(付箋)であり、かつハンドルが設定されていた場合」はイベントをキャンセルするという処理である。
$typeはControllerで設定されている。確かにuiTreeHandleのControllerでは$scope.$type = "uiTreeHandle"が設定されているんだけど、このソースはuiTreeNodeのものである。 uiTreeHandleのScopeをuiTreeNodeでどうやって取得しているんだろう? さかのぼってみてみると以下のような記述がある。

// the element which is clicked.
var eventElm = angular.element(e.target),  
  eventScope = eventElm.scope(),
  cloneElm = element.clone(),
  eventElmTagName, tagName,
  eventObj, tdElm, hStyle;

e.targetでEventを発火した要素を取得し、そこからangular.element()でAngularObjectに変換して、scope()をコールすることで取得できるのか。なるほどね。
確かにドキュメントにも書いてありますわ…。これによるとControllerも取得できるみたい。ってことはモンダプラクティスにあったようにScopeの排除を行っていても連携できそう。

肝心のDirectiveの切り分けができてない!

でもでも、ロジックは結局uiTreeNodeに集約されているようにみえる。これじゃいけてないんだよなぁ…。どうすればいいんでしょう。動的にDirectiveを設定するのもなんか行けてない気がするし…その場合はCompileすればいいのかな?わからん。誰か教えてくれ。

追記1

やっぱりServiceをInjectしてそれを用いてEventを処理するのがいいかなー。Eventを処理するメソッドはSingletonのがいいし、ScopeとかControllerとかは引数で渡せばいいわけで。ちょっと明日はそれを元にしたコードを書いてみよう。