设计具有数百个具有不同属性值的子类型的基本类型的最佳方法

时间:2019-03-03 14:37:35

标签: c# oop design-patterns

我有这种情况:

有一个基本类型说它是一个文件。然后,几乎有100种类型的文档具有不同的属性。

例如:

BaseDoc:
    PropA = null
    PropB =defXyz
    PropC = defCCC

Doc A: BaseDoc
    PropA = true
    PropB =Xyz
    PropC = CCC

Doc B:BaseDoc
    PropA = false
    PropB =Xyz1
    PropC = CCC1

现在这就是我对每个文档所做的工作,创建新类,然后添加其属性。但是现在我有100个文档,为每个文档创建100个类看起来很糟糕。

达到这种结果的最佳方法是什么。

如果有问题,我正在使用c#。

1 个答案:

答案 0 :(得分:2)

基于对问题的评论,如果文档类型仅在属性值和验证规则方面有所不同,我将为所有文档使用一个类。
至于验证,我建议使用一个方法来创建一个验证器接口,该方法将接收文档并返回布尔值-并且让不同的类针对不同的文档类型实现此接口:

public interface IDocumentValidator
{
    bool IsValid(Document document);
}


public class DocAValidator : IValidator
{
    public bool IsValid(Document document)
    {
        // specific implementation for doc A
    }
}

public class DocBValidator : IValidator
{
    public bool IsValid(Document document)
    {
        // specific implementation for doc B
    }
}

当然,如果您具有不同文档类型之间共有的部分验证,则可以创建一个基类来保存这些部分并避免代码重复:

public class CommonDocumentValidator : IValidator
{
    public virtual bool IsValid(Document document)
    {
        // common validation rules here
    }
}

,然后像这样继承此类:

public class DocAValidator : CommonDocumentValidator
{
    public override bool IsValid(Document document)
    {
        if(!base.IsValid(document)) return false;

        // specific implementation for doc A
    }
}