我在Entity Framework中有以下实体:
public class School {
public int Id { get; set; }
public string SchoolName { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}
public class Course {
public int Id { get; set; }
public int SchoolId { get; set; }
public string CourseName { get; set; }
public virtual ICollection<Student> Students { get; set; }
public virtual School School { get; set; }
}
public class Student {
public int Id { get; set; }
public string FullName { get; set; }
public int Grade { get; set; }
public int CourseId { get; set; }
public virtual Course Course { get; set; }
}
我的应用程序中有一个特定页面,需要总结一些您可以在此jsfiddle中看到的信息:http://jsfiddle.net/Jsf3f/
基本上我需要在汇总信息的表格中显示数据。我需要向每个学校展示自己的学校,其中所有课程的学生总数和所有课程的最高分。我还需要单独显示每门课程,并总结信息,包括注册的学生人数和课程中所有学生的最高年级。
为了做到这一点,我非常确定我需要创建可以汇总这些信息的新域类。
我的问题:
为了正确地总结这些信息,我将创建一个处理返回SchoolSummary
对象的存储库。 SchoolSummary会被视为域驱动设计的集合根吗?
我是否尝试创建不同的域模型,并使摘要只是一个可以轻松将域对象转换为摘要的视图模型。
我认为我在尝试可视化域层与仅我的数据库层(实体框架)和表示层(MVC)时遇到了麻烦。
答案 0 :(得分:1)
您在查看域图层时遇到问题,因为您没有任何域逻辑。 You should only use DDD when you need it。从您发布的内容来看,您似乎有一些贫血的实体。保持简单并抵制使用DDD的诱惑,除非您有复杂的业务逻辑。你会更开心。
对于SchoolSummary
,这听起来像是一个消息(DTO,ViewModel等),您想要从查询中组合,然后一直到视图。好又简单。
希望这有帮助。
答案 1 :(得分:1)
说实话,您可以在应用程序的其余部分应用DDD,但在这种情况下,您只处理查询和报告。如果您正在使用CQRS(命令查询责任分离),那么基本上您可以创建一个简化的查询模型(视图模型本身的一部分)和一个将为它们提供服务的查询存储库。
因此不需要AR,只需为报告使用量身定制的存储库。关于DDD,IMO仅适用于命令(创建和更新模型),但是应用程序具有读取和写入功能,因此可以以更简单的方式处理不是“写入”的内容。最后,我们在应用程序中应用心态,我们不应强迫应用程序适应心态。