gpt4 book ai didi

c# - DDD解决方案结构

转载 作者:可可西里 更新时间:2023-11-01 10:01:52 26 4
gpt4 key购买 nike

我正在尝试为新的 DDD 项目创建一个很好的解决方案结构。我创建了一个“核心”项目,我在其中添加了实体、值对象和存储库接口(interface),然后我添加了一个“基础设施”项目,其中包含之前 IRepository 的实现。

现在,由于我的数据库将是 MongoDb,我需要在实体的某些字段中添加“[BsonDateTimeOptions]”等属性,这将需要在核心项目中添加对 MongoDb 驱动程序包的引用。

由于核心项目不应该包含任何对 MongoDb 的引用,应该只包含业务逻辑并且它应该可以在任何其他项目(移动 - Xamarin)中重用,在这种情况下最佳实践应该是什么?

我能想到的是:

  • 实体将不包含对 MongoDb 的任何引用
  • 在基础设施项目中为每个实体创建一个模型,该模型是相关实体的副本,但具有 MongoDb 属性。
  • 创建一个层(在存储库中?)能够使用模型在数据库中查询,然后在实体中转换它并返回实体,将模型对象隐藏在存储库中。

这种方法有一个问题,我将有一个实体的副本,即模型,它只有 MongoDb 属性,当向实体添加一些字段时,我将不得不修改模型。这是正确的做法吗?

一切都从this开始解决方案结构。

最佳答案

不要在域类中使用属​​性,而是在基础架构层中编写配置代码。

这似乎总是 MongoDB.NET 的一个选项,例如

BsonClassMap.RegisterClassMap<MyClass>(cm => 
{
cm.AutoMap();
cm.MapMember(c => c.DateOfBirth).SetSerializer(new DateTimeSerializer(dateOnly: true));
}

代替

[BsonDateTimeOptions(DateOnly = true)]
public DateTime DateOfBirth { get; set; }

关于c# - DDD解决方案结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52596881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com