gpt4 book ai didi

c# - 数据库特定类型是否进入域模型或数据访问层?

转载 作者:行者123 更新时间:2023-11-30 18:40:39 25 4
gpt4 key购买 nike

我的领域模型中定义了我的实体,例如客户、订单等。

现在我想定义一个名为 IRepository 的接口(interface)来表示我的持久层,我将进一步拥有实现 IRepository 的 SQLRepository、CacheRepository。

现在我想知道我是否应该在域模型或数据访问层中定义 IRepository?我想 SQLRepository 和 CacheRepository 需要进入 DAL,但 IRepository 也进入那里吗?

此外,例如,我的存储库从客户表返回客户列表,我对如何设计它有点困惑,似乎我最终在 DAL 和域模型中重复类型。请参见下面的示例:

在应用程序中我想做这样的事情:

var repository = new SQLRepository();

//Below repository.customers represents customer table
List<Customer> customers = repository.Customers.list();

所以在我的领域内:

class Customer
{
public int id;
public string name;
}

在我的 DAL 中:

class SqlRepository:IRepository
{
public CustomerTable Customers;
}

class CustomerTable
{
public List<Customer> list();
}

我想知道是否有更好的方法来设计这些层?

* 更新

我已经在不同的类库/程序集中定义了 DAL 和域。最初我以为我会有像 Customer 这样的 POCO 实体,它们代表数据库表中的一条记录,但后来在哪里声明 Customer.Add(customer) ?它进入 DAL 吗?我不想要 DAL 中的业务规则,如果我开始在我的实体中添加方法,它们会变得复杂,其中包含持久性逻辑和业务逻辑。

最佳答案

以下信息是针对另一个问题的,它向您展示了一个简单的项目结构:Placing Model in separate assembly

我的意见是 IRepository 接口(interface)应该在您的 DataLayer 项目中公开。实现可以是私有(private)的(使用工厂或依赖注入(inject)将它们加载到其他项目中),您创建的域模型可以由您的业务层和数据层共享。

关于c# - 数据库特定类型是否进入域模型或数据访问层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7898554/

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