Oop 如果我的对象/模型包含域功能,它们应该位于何处?
我使用CRC卡设计了我的类,我有一组可爱的对象,其中包含域/业务逻辑和数据(属性)。有些类需要保存到数据库或从数据库中读取 我的存储库应该存在于我的域对象的单独项目中,但需要引用它们才能创建它们 但是,域对象/实体需要能够引用存储库 我可以将这些对象放在存储库中,但由于它们包含域功能,这一点都不合适 我可以将需要持久性的对象放在一个公共共享项目中,但再次指出,将它们单独列出是不对的Oop 如果我的对象/模型包含域功能,它们应该位于何处?,oop,design-patterns,architecture,repository,domain-driven-design,Oop,Design Patterns,Architecture,Repository,Domain Driven Design,我使用CRC卡设计了我的类,我有一组可爱的对象,其中包含域/业务逻辑和数据(属性)。有些类需要保存到数据库或从数据库中读取 我的存储库应该存在于我的域对象的单独项目中,但需要引用它们才能创建它们 但是,域对象/实体需要能够引用存储库 我可以将这些对象放在存储库中,但由于它们包含域功能,这一点都不合适 我可以将需要持久性的对象放在一个公共共享项目中,但再次指出,将它们单独列出是不对的 我应该把它们放在哪里?我禁不住觉得我遗漏了一些明显的东西。域对象/实体不应该使用存储库。其域/应用程序服务应使用存
我应该把它们放在哪里?我禁不住觉得我遗漏了一些明显的东西。域对象/实体不应该使用存储库。其域/应用程序服务应使用存储库。这非常简单——您应该在域模型程序集中定义存储库接口,并在域/应用程序服务中使用它们 域库应包含
- 域模型
- 存储库接口
- 域服务(仅使用存储库的接口)
持久性库应该包含特定于数据提供程序的存储库的实现。例如,它可以使用实体框架。此库应引用您的域库。因此,它将了解应该实现的接口以及应该使用的实体。域对象/实体不应该使用存储库。其域/应用程序服务应使用存储库。这非常简单——您应该在域模型程序集中定义存储库接口,并在域/应用程序服务中使用它们 域库应包含
- 域模型
- 存储库接口
- 域服务(仅使用存储库的接口)
- 域核心项目(业务模型、核心业务逻辑、依赖接口)
- 依赖项项目(引用域核心项目,实现接口)
- 应用程序项目(引用域核心项目,直接引用依赖项项目,或通过配置,或通过处理依赖项注入的中间项目)
public class SomeBusinessModel
{
private ISomeDependency SomeProperty
{
get
{
return DIFactory.Current.Resolve<ISomeDependency>();
}
}
}
公共类业务模型
{
私有等轴测属性
{
收到
{
返回DIFactory.Current.Resolve();
}
}
}
DIFactory
有一个名为Current
的静态属性,它基本上是一个返回依赖项注入解析器的工厂方法,它的接口有一个名为Resolve
的方法,它接受一个类型并返回一个实例
所以在这种情况下
位于域核心项目中SomeBusinessModel
位于域核心项目中ISomeDependency
(当前IDIContainer
的返回类型)位于域核心项目中Current
位于域核心项目中,并由应用程序项目为特定依赖项注入容器初始化(它有一个设置当前注入容器的DIFactory
方法)Initialize
(解析程序返回的实际实例类型)位于依赖项项目中SomeDependency
- 域核心项目(业务模型、核心业务逻辑、依赖接口)
- 依赖项项目(引用域核心项目,实现接口)
- 应用程序项目(引用域核心项目,直接引用依赖项项目,或通过配置,或通过处理依赖项注入的中间项目)