In a Blog application, a Post is an Entity and a Tag is a value object. A Tag hasn't got identity. You should have:
- PostsRepository
- Post (Entity)
- Tag (value object)
A Post has got a list of tags.
Questions:
1 : I have also read that it is not good practice to have a domain entity converse with a domain service. Is this true?
Yes, itsn't a good practice. You entity hasn't want to be coupled with a domain service. If you do that, then you couldn't reuse them later. Did you have consider to fire a domain event. You can tell your service domain do something fire domain events.
2. : Is it ok to get a reference to the PostServices domain service via a factory creation method. e.g..IPostService PostService = ServiceUtil.GetPostService(); return PostService.GetTags(Post.content);
Yes, it's possible. A factory method could return an abstract class or an interface. This is a good Software Design Principle "code to an interface not to an implementation". If you do this, you'll be able to change your implementation later and you won't have to change yout client code.
3 : Is it acceptable to have the domain service coupled to a third party api?
I don't recommend you this, but it is acceptable.
Sorry, I don't understand question 4.
Look this link. I hope it help you.