I am learning DDD and I am a little bit lost in Infrastructure layer.
As I understand, \"all good DDD applications\" should have 4 layers: Presentation, Application, Dom
Why would you put repository implementations into Infrastructure ? They're not related to 'Infrastructure' at all imho.
According to Evan's Blue Book, repositories are a part of the domain model. Therefore, I put the repository interface inside the domain model. The implementation of the repository sometimes as well.
Infrastructure should contain 'infrastructure' code, which could be a service which enables you to easily sent e-mail over smtp, or code which abstracts DB access for you (so, some classes that you could use in your repository, but it is not your repository).
So, do not put your repositories into 'infrastructure', since they do not belong there. To me, the classes that can be found in infrastructure , are classes that you can use in different other projects, see what I mean ? Classes that are not tightly related to your domain model or application belong in Infrastructure. And a repository implementation is quite tightly coupled to a specific application. :)