gpt4 book ai didi

c# - 动态类创建

转载 作者:太空宇宙 更新时间:2023-11-03 22:27:25 25 4
gpt4 key购买 nike

我们有一个数据层,其中包含由数据库的输出(表/ View /过程/函数)生成的类。数据库中的表是规范化的,设计类似于 OOP 设计(“invoice”表与“document”表具有 1:1 关系,“invoice-item”表与“document-item”表具有 1:1 关系", etc..."。所有对数据库的访问都是通过存储过程进行的(对于简单表也是如此)。

典型的类看起来像(很快):

public class DocumentItem {
public Guid? ItemID { get; set; }
public Guid? IDDocument { get; set; }
public DateTime? LastChange { get; set; }
}

public class InvoiceItem : DocumentItem {
public Guid? IDProduct { get; set; }
public decimal? Price { get; set; }
}

问题是,数据库表之间的关系类似于 OOP 中的多重继承。现在我们为每个数据库输出创建一个新类。但是每个数据库输出都是数据库中“纯”表的组合。

理想的解决方案是(恕我直言)将类转换为接口(interface),使用接口(interface)的多重实现,然后自动实现成员(这个“表类”只有属性,属性的主体总是相同的)。

例如: 公共(public)接口(interface) IItem { 引导?元素ID { 得到;放; } 约会时间? LastChange { 得到;放; }

public interface IDocumentItem : IItem {
Guid? IDDocument { get; set; }
}

public interface IItemWithProduct : IItem {
Guid? IDProduct { get; set; }
}

public interface IItemWithRank : IItem {
string Rank { get; set; }
}

public interface IItemWithPrice : IItem {
decimal? Price { get; set; }
}

// example of "final" item interface
public interface IStorageItem : IDocumentItem, IItemWithProduct, IItemWithRank { }

// example of "final" item interface
public interface IInvoiceItem : IDocumentItem, IItemWithProduct, IItemWithPrice { }

// the result should be a object of class which implements "IInvoiceItem"
object myInvoiceItem = SomeMagicClass.CreateClassFromInterface( typeof( IInvoiceItem ) );

数据库包含大量表格,整个解决方案由动态加载的模块(100 多个模块)组成。

你认为最好的方法是什么,如何处理?

编辑:

使用分部类是一个很好的技巧,我们的解决方案中的 bud 不能使用,因为“IDocumentItem”和“IItemWithPrice”(例如)在不同的程序集中。

现在,如果我们在“DocumentItem”表中进行更改,我们必须重新生成所有相关程序集中的源代码。几乎没有重用(因为不能使用多重继承)。如果有几十个依赖程序集,它会非常耗时。

最佳答案

我认为从数据库模式自动生成域模型是个坏主意。

关于c# - 动态类创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/830538/

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