DDD - Dépendances entre le modèle de domaine, les services et les référentiels

Voulais juste savoir comment d'autres ont des couches de leur architecture. Dire que j'ai mes couches comme suit:

Couche Domaine

--Produit

--ProductService (si l'imp aller dans cette couche?)

--IProductService

--IProductRepository

La Couche De L'Infrastructure

--ProductRepository (Imp de IProductRepository dans mon domaine)

Maintenant, quand un nouveau produit est créé, j'ai une obligation d'attribuer un id de produit d'appel de la ProductService.GetNextProductId() la méthode.

Parce que le service a une dépendance sur le référentiel-je configurer la ProductService ctor avec une interface de IProductRepository qui peut être injecté plus tard. quelque chose comme ceci:

    public class ProductService : IProductService
    {
        private IProductRepository _repository;

        public ProductService(IProductRepository repository)
        {
            _repository = repository;
        }

        public long GetNextProductId()
        {
            return _repository.GetNextProductId();
        }
    }

Mon problème est que lorsque j'utilise le service dans la Classe de Produit, je fais référence à l'espace de stockage dans le ctor lors de l'instanciation d'un nouveau ProductService classe. En DDD son une grande ne pas avoir une telle référence. Je' ne suis même pas sûr si mon domaine, la classe est mis en place correctement pour appeler le service, quelqu'un peut-pls conseiller:

public class Product : Entity
    {
        private ProductService _svc;
        private IProductRepository _repository;

        public Product(string name, Address address) //It doesnt seem right to put parm for IProductRepository in the ctor?
            : base(_svc.GetNextProductId) //This is where i pass the id
        {
            //where to create an instance of IProductRepository?
        }
    }

Comment puis-je élégamment résoudre ce problème de conception? Je suis ouvert aux suggestions de l'expérience DDD'ers

EDIT:

Merci pour vous commentaires. J'ai aussi demandé si le service doit être appelée à partir de la Catégorie de Produit. Je n'ai pas utilisé un modèle de fabrique (encore) que la construction de l'objet est toujours simple. Je ne me sens pas que cela justifie une méthode de fabrique encore?

Je suis confus...Mettre le ProductId de côté, si mon Produit de classe a besoin de certaines autres données à partir d'un Service électronique.g GetSystemDateTime() (je sais, mauvais exemple, mais en essayant de démontrer une non db appel) où serait ce service appelée méthode?

Services de DDD sont logique décharges où la logique n'est pas natrual à l'objet du domaine, droit? Alors, Comment est-il colle ensemble?

source d'informationauteur