gpt4 book ai didi

c# - 如何在不同层次的多态类之间保持一对一的关系?

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

我有一个域逻辑层,其中存在一个抽象父类(super class),我们称它为 DomainAbstractClass

许多具体类都继承自该类,我们称它们为ConcreteDomainClass1ConcreteDomainClass2等。

现在,在另一个程序集中,这是我的表示逻辑层,我有一个类似的层次结构,其中一个抽象父类(super class),我们称之为 PresentationAbstractClass,由许多具体类实现 ConcretePresentationClass1ConcretePresentationClass2 等等。

ConcreteDomainClass1ConcretePresentationClass1ConcreteDomainClass2ConcretePresentationClass2之间存在天然的一对一关系,等等...因为表示类封装了每个特定域实体的特定表示逻辑。

由于我想让我的域逻辑层尽可能保持无依赖性,我的表示逻辑层引用了域逻辑层,但反之则不然。

现在,表示逻辑层调用领域逻辑层中的一个方法返回一个AbstractDomainClass,我需要根据创建合适的ConcretePresentationClassN ConcreteDomainClassN 抽象领域类的真正含义。

有没有一种创造模式可以让我不必求助于这种丑陋的东西就可以完成这项工作?

if(abstractClass is ConcreteDomainClass1)
new ConcretePresentationClass1();

else if (abstractClass is ConcreteDomainClass2)
new ConcretePresentationClass2();

// ... and so on

最佳答案

我建议使用工厂模式,将整个事情包装在一个简单的工厂方法中,并使用字典在类之间进行映射:

private Dictionary<Type, Func<DomainAbstractClass, PresentationAbstractClass>> factory = 
new Dictionary<Type, Func<DomainAbstractClass, PresentationAbstractClass>>
{
{ typeof(ConcreteDomainClass1), (x) => new ConcretePresentationClass1(x) },
{ typeof(ConcreteDomainClass2), (x) => new ConcretePresentationClass2(x) },
....
};

public PresentationAbstractClass ObtainPresentationClassFromDomainClass(DomainAbstractClass domainClass)
{
return factory[domainClass.GetType()](domainClass);
}

关于c# - 如何在不同层次的多态类之间保持一对一的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20000582/

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