Manipulación de DOM en angularJS: ¿mejor práctica?

Estamos creando una gran aplicación web usandoAngularJS. Utilizamos muchas directivas personalizadas para diferentes casos. Cuando se trata de manipular DOM, eventos de enlace, etc. Sucede que definimos funciones que manipulan el DOM en una directiva personalizada.link función, pero lo llamamos desde el controlador (definimos funciones en el$scope para que pueda ser accesible por el controlador dado). Creo que la forma angular de hacerlo sería definir una directiva personalizada separada para cada función y usarla directamente desde la plantilla, pero en nuestro caso no sé hasta qué punto será cómodo hacerlo, ya tenemos una gran cantidad de directivas personalizadas, por lo que es MALO hacer lo que estamos haciendo (definir la función que manipula el DOM en una directiva y llamarlo desde el controlador), ¿eso tiene un significado o es como si estuviéramos manipulando el DOM en el controlador? ? Para nosotros, es un poco preocupante la separación, nunca definimos la función que manipula el DOM en el controlador, solo en la directiva, pero llamarlo desde el controlador no parece ser tan correcto, ¿verdad?

Un ejemplo que muestra cómo se ve nuestra directiva personalizada:

angular.module('exp', []).directive('customdirectiveExp', ['', function(){
// Runs during compile
return {
    name: 'customDirectiveExp',
    controller: "ControllerExp",
    controllerAs: "ctrl",
    templateUrl: 'templateExp',
    link: function($scope, iElm, iAttrs, controller) {

        /* These function will be called from the ControllerExp when it needs so.
         Function can do any things like manipulating the DOM, addin
         event listner ...
        */
        scope.manipulateDom1 = function(){
            // DOM manipualtion
        };

        scope.manipulateDom2 = function(){
            // DOM manipualtion
        };

        scope.manipulateDom3 = function(){
            // DOM manipualtion
        };

    }
};
}]);

Respuestas a la pregunta(1)

Su respuesta a la pregunta