首页 > 解决方案 > 使用必须存在的属性初始化类的最佳方法

问题描述

示例类

public class Company {
    public Details Details { get; set; }
    public List<Employeee> Employees { get; set; }

    public Company() { 
    }
}

public class Details {
    public string Name { get; set; }
    public string Url { get; set; }

    public Details() {
    }
}

代码中某处的用法...

var c = new Company();
c.Details = new Details();
c.Details.Name = "Example";
c.Details.Url = "http://example.org/";

没有细节就拥有一家公司是没有意义的。

我的一个想法是

这似乎是一个常见问题,我想知道是否有一种标准的方法来处理它,这将导致可测试的类。我不确定要搜索什么。

标签: c#software-design

解决方案


如果我理解正确,我认为最好的方法是只创建一个带有Detailsas 参数的构造函数。

例子:

public class Company
{
    public Details Details { get; set; }
    public List<Employeee> Employees { get; set; }

    public Company(string Name, string Url)
    {
        this.Details = new Details(Name, Url);
    }
    
    public Company(Details Details)
    {
        this.Details = Details;
    }
}

public class Details
{
    public string Name { get; set; }
    public string Url { get; set; }

    public Details(string Name, string Url)
    {
        // If the validation fails, throw an error
        if (string.IsNullOrWhiteSpace(Name))
            throw new ArgumentException($"'{nameof(Name)}' cannot be null or empty", nameof(Name));
        if (string.IsNullOrWhiteSpace(Url))
            throw new ArgumentException($"'{nameof(Url)}' cannot be null or empty", nameof(Url));

        this.Name = Name;
        this.Url = Url;
    }
}

推荐阅读