回答:
モジュールは、ディレクティブ、サービス、定数など、他の多くのものを結び付ける場所であると考えてください。モジュールを他のモジュールに挿入して、高度な再利用を実現できます。
Angularアプリを作成する場合、アプリケーションコード(テンプレートなし)であるトップレベルモジュールが存在します。
サービスは主にコントローラー間で通信する方法ですが、あるサービスを別のサービスに注入することもできます。サービスはデータストアにアクセスする方法としてよく使用され、人々はngResourceなどのAngular APIをラップします。この手法は、テスト(特にモック)を非常に簡単にするので便利です。認証、ロギングなど、他のことを実行するためのサービスを持つことができます。
ディレクティブは、ウィジェットの作成や、jqueryプラグインなどの既存のもののラップに使用されます。既存のプラグインをラップすることは難しい場合があります。これを行う理由は、プラグインとAngularの間の双方向のデータバインディングを確立するためです。双方向のデータバインディングが必要ない場合は、それらをラップする必要はありません。
ディレクティブは、DOM操作を行ったり、DOMイベントをキャッチしたりするための場所でもあります。コントローラーまたはサービスでDOM関連のことを行うべきではありません。ディレクティブの作成はかなり複雑になる可能性があります。私見、私はあなたが探していることを実行できる何かのために最初にAPIを見るか、またはAngularのGoogleグループに助言を求めることをお勧めします。
私自身の個人的なメモから(主にドキュメント、Googleグループの投稿、SOの投稿からのスニペット):
モジュール
サービス
ディレクティブ(以下の項目のいくつかは基本的に同じことを言いますが、わずかに異なる表現が時々役立つことがわかりました)
Angularのもの(依存性注入のもの)をモジュールに定義してグループ化します。
データを共有し、Webサーバーの相互作用をサービスにラップします。
HTMLを拡張し、ディレクティブでDOM操作を行います。
また、コントローラを可能な限り「薄く」します。