Felipe,
Um detalhe que é importante você considerar é justamente a nomenclatura dos teus serviços.
"ProcessoService" e "AndamentoService" são nomes que não dizem absolutamente nada (e ainda tem mistura idioma).
Quando você modelar as coisas você deve modelar elas pensando no seu domínio.
Como você vai conversar com os outros envolvidos no projeto (não devs) sobre esse serviço?
Eu gosto de trabalhar com serviços de domínios bem especializados e com nomes que dizem aquilo que fazem (normalmente em inglês).
Vamos pegar o seu caso "Tenho um processo e andamentos do processo, quando cadastro um processo ele já deve ter o primeiro andamento e assim por diante"
Estamos claramente falando da criação de novos processos, e SEMPRE que criar um novo processo ele deve conter um andamento (o "assim por diante" eu vou omitir, pq também não diz nada :p).
O serviço poderia ser chamado de serviço de registro de processos, com um método para realizar este trabalho.
Assim temos que pensar quais são as entradas deste método, ou seja o que é necessário para inicializar um novo processo. Eu não faço a mínima ideia, portanto vou colocar apenas o responsável pelo processo.
Na "conversa" sobre o domínio ficaria algo como: nós enviamos o responsável (ou outros dados) ao serviço de registro de processos que criará um novo processo e realizará a persistência dos dados.
Acho que pessoas da equipe (não desenvolvedores) conseguirão entender de boa.
A implementação seria algo como:
interface ProcessRegistrationService
{
/**
* Registers a new process
*
* @param User $responsible
*
* @return Process
*/
public function registerProcess(User $responsible);
}
interface ProcessFactory
{
/**
* Registers a new process // Como a criação do processo não é algo trivial (envolve processo e andamento), é legal que a gente separe esta tarefa do serviço em uma factory (que é um conceito do DDD que não foi mencionado ainda)
*
* @param User $responsible
*
* @return Process
*/
public function create(User $responsible);
}
interface ProcessRepository
{
/**
* Persists the process
*
* @param Process $process
*/
public function persist(Process $process);
}
Quanto à injeção de mais de um repositório dentro de um serviço, apenas devemos considerar que o serviço de receber todas as dependências necessárias para realizar suas operações, ou seja no problem at all :D