I would try and go with a Unit of Work pattern where you open, make changes, commit, and then it just figures out the right thing to do.
If you're in a relational database, you'll end up with something like Hibernate having a mapper per table. If you are in a non-relational database, you might have to get creative, and mark domain objects as IAggregateRoot or something, to know which ones have their own repositories and which don't.
For example, if Employees are stored in one SOA, and Addresses in another, they'd each be IAggregateRoots, and ideally the Unit of Work would automatically hand each of the dirty instances off to its corresponding repository for saving.
So then its transparent to client code, but not a useless layer of indirection (like services mostly are, in the java world anyway--not always, but the ones I've seen).
I love DDD, but I think it over-hypes repositories, and, empirically, causes a lot of confusion because people are always asking how to do them correctly.
Unless I had a system with known multiple SOA-based backends (and not just "hey, we might be Amazon someday and need that"), I would shy away from repositories, personally. Hibernate-based mappers/DAOs/something, sure, but they seem simpler and more concrete than repositories.