C# 我可以引用特定实体服务中不同实体的存储库吗?

C# 我可以引用特定实体服务中不同实体的存储库吗?,c#,asp.net,entity-framework,domain-driven-design,C#,Asp.net,Entity Framework,Domain Driven Design,在DDD(域驱动设计)中:我可以引用特定实体服务中不同实体的存储库吗 例如(如果示例有点脱离上下文,我很抱歉): 知道存在学生和学生地址实体 public class StudentService : ServiceBase<Student>, IStudentService { private readonly IStudentAddressRepository _studentAddressRepository; // Is this reference valid?

在DDD(域驱动设计)中:我可以引用特定实体服务中不同实体的存储库吗

例如(如果示例有点脱离上下文,我很抱歉):

知道存在学生学生地址实体

public class StudentService : ServiceBase<Student>, IStudentService {

    private readonly IStudentAddressRepository _studentAddressRepository; // Is this reference valid?
    private readonly IStudentRepository _studentRepository;

    public StudentService(IStudentRepository repository, IStudentAddressRepository studentAddressRepository) : base(repository)
    {
        //... IoC
    }    
}
public class StudentService:ServiceBase,IStudentService{
私有只读IStudentAddressRepository _studentAddressRepository;//此引用有效吗?
私人只读是学生档案库(studentRepository);
public StudentService(IStudentRepository存储库、IStudentAddressRepository studentAddressRepository):基本(存储库)
{
//……国际奥委会
}    
}

StudentAddressRepository或实体StudentAddress的此引用有效吗?

我认为从DDD术语的概念上来说,这是可以的,但有时可能会指向一个可能的建模问题。关于服务存在的原因的更多细节会有所帮助

在蓝皮书中,Eric Evans举了一个资金转账服务的例子,该服务与两个对象交互——Account和Ledger。我将通过拥有一个接受这两个对象的域服务来实现这一点,而不是在域服务构造函数中拥有它们各自的存储库——负责在应用层中加载它们

例如,类似于:

public static class StudentService {

    public static void WhateverItIsYouAreDoing(Student student, StudentAddress studentAddress) {
        // do something
    }
}

添加域服务时要考虑的另一件事是,它是否会添加到无处不在的语言中?你能和领域专家讨论一下这项服务吗?也就是说,“资金转账服务”是你可以想象的与领域专家谈论的东西。

我认为用DDD术语来说,从概念上来说是可以的,但有时可能会指向一个可能的建模问题。关于服务存在的原因的更多细节会有所帮助

在蓝皮书中,Eric Evans举了一个资金转账服务的例子,该服务与两个对象交互——Account和Ledger。我将通过拥有一个接受这两个对象的域服务来实现这一点,而不是在域服务构造函数中拥有它们各自的存储库——负责在应用层中加载它们

例如,类似于:

public static class StudentService {

    public static void WhateverItIsYouAreDoing(Student student, StudentAddress studentAddress) {
        // do something
    }
}


添加域服务时要考虑的另一件事是,它是否会添加到无处不在的语言中?你能和领域专家讨论一下这项服务吗?例如,“资金转账服务”是你可以想象的与领域专家谈论的东西。

该服务在做什么?看起来很奇怪,
StudentService
“是一个“学生存储库”并且“有一个”学生存储库。我不认为它应该是一个存储库。但是这个问题是基于观点的,我很抱歉。我犯了一个错误。它实际上是ServiceBase ServiceBase的用途是什么?这是一个在实体之间具有类似服务的基类。该服务在做什么?看起来很奇怪,
StudentService
“是一个“学生存储库”并且“有一个”学生存储库。我不认为它应该是一个存储库。但是这个问题是基于观点的,我很抱歉。我犯了一个错误。它真的是ServiceBase ServiceBase的用途是什么?这是一个在实体之间具有类似服务的基类。谢谢你的回答。回答上述问题:首先,我希望在不使用延迟加载的情况下恢复学生地址,因此我提出了这样一个问题:调用此存储库(IstudenAddressRepository)并在学生服务中使用它是否正确,因为它已经把学生和他们的地址带来了。我不会为此使用服务,这不是他们真正的目的。如果你想和学生一起返回地址,我只需要在StudentRepository-GetWithAddresses或类似的东西上有一个方法。但是,这取决于您试图做什么以及为什么需要这些地址:)我需要在UI(MVC)上显示这些地址。您是否建议我在应用程序存储库之间进行数据恢复?(我正在初始化DDD)。只需保持简单并从存储库加载它们,这里没有关联的域逻辑,因此不需要任何额外的复杂性,例如域服务谢谢,Tom。可以肯定的是,在IoC的StudentRepository类构造函数中初始化IstudentAddressRepository接口是否有任何问题?谢谢您的回答。回答上述问题:首先,我希望在不使用延迟加载的情况下恢复学生地址,因此我提出了这样一个问题:调用此存储库(IstudenAddressRepository)并在学生服务中使用它是否正确,因为它已经把学生和他们的地址带来了。我不会为此使用服务,这不是他们真正的目的。如果你想和学生一起返回地址,我只需要在StudentRepository-GetWithAddresses或类似的东西上有一个方法。但是,这取决于您试图做什么以及为什么需要这些地址:)我需要在UI(MVC)上显示这些地址。您是否建议我在应用程序存储库之间进行数据恢复?(我正在初始化DDD)。只需保持简单并从存储库加载它们,这里没有关联的域逻辑,因此不需要任何额外的复杂性,例如域服务谢谢,Tom。可以肯定的是,在IoC的StudentRepository类构造函数中初始化IstudentAddressRepository接口是否有任何问题?