我正在尝试为我最常见的开发场景编写可重用的组件:
我制作了一个通用的表示层来表示要封装在域对象中的域对象和数据对象(dc-serializable)。我也有某种域状态/上下文,我在其中保留了所有域对象实例的引用。这个想法是域对象具有特殊的集合,当它们第一次被按需访问时,这些集合会从数据源中填充。我认为这不完全是“DDD”,但它似乎有效......
无论如何,现在我被困在数据上下文和数据源部分。我一直在思考如何存储数据并与数据源交互;zip 文件、sql-server、sql-lite-files、实体框架、nhibernate、linqtosql、mongodb 等中的 xml,我无法决定使用什么。看来我需要抽象出数据源和数据上下文,而是决定在每个应用程序中使用什么。重要的是我没有在特定框架上嵌入任何硬依赖。
抽象出数据上下文和数据源,并且仍然让它在现有的各种框架中运行良好和容易,是否现实?我想错了吗?这是一个死胡同吗?
我想要和需要的(我认为)是我的域状态,以便能够在数据上下文中查询匹配某些条件的对象。我不确定它是否应该能够与整个对象图或仅单个数据对象一起使用,或者甚至不能使用具体类型而只能使用一些通用对象,或者是否应该为每个请求克隆它们。当我开始思考这个问题时,我感到非常困惑......
呸呸呸
更新:
我将 DataContext/DatabaseContext(例如 EntityFramework)视为一个模块/层,用于将对象缓存在内存中、执行查询、从/向任何数据源获取和存储数据,并将类型化的对象返回给消费者。这是正确的吗?
存储库模式 (DDD) 和我的 DataContext 有什么区别?
更新 2:
基本上,这是我的模型(好还是坏?):
DataSource->DataContext/DataObject->DomainState/DomainObject->Presenter