繁体   English   中英

要求创作设计/样式建议

[英]Request for Creational Design/Pattern Suggestion

我有一些在概念上都相关的类,但是在细节级别上有更多这样的类。 例如,这三个类具有几乎相同的属性(尽管成员函数会有所不同):

public class RelatedA : IRelatedType
{
    public string Name { get; set; }
    public string Value { get; set; }
    public DateTime Stamp { get; set; }
}

public class RelatedB : IRelatedType
{
    public string Name { get; set; }
    public string Value { get; set; }
    public DateTime Stamp { get; set; }
}

public class RelatedC : IRelatedType
{
    public string Name { get; set; }
    public string Value { get; set; }
    public DateTime Stamp { get; set; }
    public int Special { get; set; }
}

从概念上讲,还有其他两个与上述3个类相关的类,但在实现方面可能有所不同:

public class RelatedD : IRelatedType
{
    public string Name { get; set; }
    public string Statement { get; set; }
}

public class RelatedE : IRelatedType
{
    public string Name { get; set; }
    public string Statement { get; set; }
    public bool IsNew { get; set; }
}

这些实例可以由工厂基于某种​​“类型”枚举值创建。 问题是,稍后在使用这些对象时(例如,在业务层中),可能会有很多这样的代码:

IRelatedType theObject = TheFactory.CreateObject(SomeEnum.SomeValue);

if (theObject is RelatedC)
{
    RelatedC cObject = theObject as RelatedC;
    specialVal = cObject.Special;
}
else if (theObject is RelatedD)
{
    RelatedD dObject = theObject as RelatedD;
    statementVal = dObject.Statement;
}
else if (theObject is RelatedE)
{
    RelatedE eObject = theObject as RelatedE;
    statementVal = eObject.Statement;
    isNewVal = eObject.IsNew;
}

这可以在许多地方重复。 我应该使用一种更好的设计方法吗?

您可以尝试将差异分解为单独的类,然后提供这些类,例如:

IRelatedType theObject = TheFactory.CreateObject(SomeEnum.SomeValue);
RelatedTypeHelper theHelper=TheFactory.CreateHelper(theObject);
theHelper.DoSpecialThing(theObject);

现在,您将不必拥有所有的if else块,并且如果您添加了一个需要进行新处理的新类型,则只需鞭策一个新的helper来实现所需的部分,就可以了。 助手应帮助记录此过程。

我还想问一个问题,为什么对specialVal和StatementVal有一个如此不同的实现可能是您的示例,但是这让我很好奇您在这里实际做什么。 您是否可以简化事情,然后退后一步并质疑这些问题是否包含在此特定层次结构中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM