O conceito de transação é bastante simples, o próprio link acima pode te ajudar. Agora se você quer aprender o controle transacional específico de um framework ou especificação, ai você deve ler direto da fonte. NO caso do spring, olhe a própria documentação dele. No caso de EJB3, existem vário slivros por ai, um que é free e eu indico para quem quer começar e ter uma idéia, é o Mastering EJB 3 (pdf free).
Pelo contrário, IMO. Quanto maior o dominio, maiores o relacionamento e etc, a Factory ajuda mais. Pois na factory você já pode criar os objetos com todos os relacionamentos necessários. Pior seria sair dando vários new Objeto() e fazer o relacionamento na camada de negócio, assim bagunçando tudo.
Além do mais, você não precisa necessariamente fazer o DI na Factory, se você não vai utilizar Factory por exemplo, você pode usar algum framework para fazer o DI, como EJB3, Spring, Google Guice, etc.
[quote=Erick Jeronimo]
3 - No caso, o repositório do entity vai apenas cumprir o papel de “fazer consultas”, ou vai ser utilizado pra armazenar/deletar/atualizar o entity (isso não seria active record)?[/quote]
Active Record é um outro padrão de projeto, não necessariamente agregado com DDD.
O repositório trabalha na camada de negócios, no dominio. Ele é o caminho para as entidades trabalharem com dados em memória, porém ele não se preocupa se eles dados serão persistidos em um banco de dados X, Y, ou se será em XML, YML, arqiuvo texto, etc… O repositório tem que ser algo o mais natural possível, aqui nomenclatura é MUITO importante. Fica muito mais simples você ter o método no repositório buscaOsDezUltimosClientesCadastrados() do que um find(select * from clientes…).
Como já foi dito, o Repositório em alguns casos pode ser apenas uma Interface e o DAO pode ser uma classe concreta que implementa essa interface, porém pode haver casos que o repositório tem sua própria implementação separada do DAO. Na minha experiência, geralmente CRUDs utilizam a primeira abordagem, enquanto quando você tem dominios mais específicos, a separação do respositório e dão são diferentes. Alias, Com JPA, a idéia de ter um DAO é quase nula, pois o EntityManager já pode fazer o papel de repositório e DAO, deixando a implementação mais simples.
E por fim, não saia criando milhões de layers sem necessidade. Tente fazer o mais simples possível. Por isso que não existe a fórmula para todos os problemas. Os padrãoes de projetos estão ai, mas devem ser usados sob-moderação (parece propaganda de cerveja
).