gpt4 book ai didi

c# - 基于公司而非用户的复杂领域模型

转载 作者:行者123 更新时间:2023-11-30 15:43:20 26 4
gpt4 key购买 nike

我有几种不同类型的公司可以访问我的网络应用程序,例如

不同类型的公司:

客户端供应商代理

每个数据库在数据库中都有自己的表,链接到存储所有公共(public)数据的主表 Company,例如地址、电话、电子邮件、带有 FK 的 TypeOfCompany 到相关表(客户等)...

在我的应用中处理这个 OO 的最佳方法是什么?

我目前在做类似的事情:

public class CompanyDTO
{
public int Id {get;set;}
public string Name {get;set;}
public Address Address {get;set;}
public string Type {get;set;} //type of company
//etc...
}

然后从该类继承并添加其他属性,例如

public class ClientDTO : CompanyDTO
{
public string Key {get;set;}
public Address Billing {get;set;}
}

但是我有时发现它有问题,例如

  1. 供应商用户想要访问:AllCompanies,- 显示所有公司的列表
  2. 然后供应商公司的用户想要查看特定公司的详细信息,现在如果是客户,我需要显示 ClientDTO 或 SupplierDTO?在这种情况下,我想显示特定公司的完整详细信息

处理此问题的最佳方法是什么?

例如GetCompanyByID(int companyid);GetClientByID(int clientid); 我应该在这两个实例中返回什么类型的对象,假设我在这两个实例中都需要客户详细信息...

最佳答案

有趣的是,数据库如何不理解派生、聚合和封装等 OO 实践。这是一个不幸的失败,但仍然只是整体称为“database impedance mismatch”的一部分。

您尝试做的事情很常见,有多种解决方案...

首先是存储数据模型的选择。基本上有三种可能性。

  1. 像你所做的那样拆分表格。
  2. 在同一个表中声明所有派生类型的所有字段。
  3. 使用 blob 字段(json/xml/其他)来存放不常见的字段。

其次是您提出的问题,从数据库中请求数据。主要是围绕“通用”基本类型列表的请求以及如何访问它们不共享的不常见字段。同样有几种可能性。

  1. 列出基本类型时,只返回那些公共(public)字段。然后一次性发出后续查询以延迟加载其他字段。
  2. 列出基本类型时,所有其他需要的表也都外连接到主表,以确保所有字段都可用于完全实例化对象模型。
  3. 列出基本类型时,会返回多个结果集,每个结果集可能需要一个“子类型”表。然后,客户端将记录拼凑起来构建对象模型,直到完成。

不是一个详尽的列表,而是一个开始。出于这个原因,我个人更愿意避免像您描述的那样的数据模型。基本上我的偏好是让数据模型定义所有字段的联合(模型#2),然后使用业务层来确定公开、验证、需要哪些属性等。我也使用了上面的模型#3,使用多个值的 blob 字段,它也根据需要工作得很好。模型 #3 优于模型 #2 的唯一缺点是您将无法在这些字段上进行查询或排序。最终,这两种方法仍然需要涉及业务逻辑层以了解要公开哪些数据。

记住数据库是愚蠢的,这样对待它们,你会相处得很好。 (注意:此建议不适用于人,仅适用于数据库)

关于c# - 基于公司而非用户的复杂领域模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768017/

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