You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用静态工厂类创建CreateProgressDTO是否符合工厂模式规范?

这种静态工厂模式的用法完全可行,而且是非常好的实践

你的实现思路很合理,用静态工厂类封装CreateProgressDTO的创建逻辑,解决重复代码问题的同时,还带来了不少额外好处:

  • 消除重复代码:把原本要在多处写的对象初始化逻辑集中到工厂类里,避免冗余代码,也减少了手动赋值出错的可能
  • 保证逻辑一致性:比如Progress的计算规则(像CreatedExactly里的四舍五入)只在工厂类里维护一次,不会出现不同地方计算进度方式不一致的问题
  • 语义更清晰:调用CreateProgressFactory.CreatedNone(total)比直接new CreateProgressDTO并手动赋值要直观得多,其他开发者一眼就能明白这个DTO代表的是“未创建任何实例”的进度状态
  • 封装边界处理:CreatedExactly里对total == 0的特殊情况做了统一处理,所有调用方都不用重复写这个判断逻辑,降低了漏处理边界场景的风险

额外优化建议

如果想进一步强化封装性,可以把CreateProgressDTO的构造函数设为私有,强制外部只能通过工厂类来创建实例,避免有人随意创建不符合规范的CreateProgressDTO对象:

public class CreateProgressDTO
{
    // 私有构造函数,禁止外部直接new
    private CreateProgressDTO() {}
    
    public int Total { get; set; }
    public int Created { get; set; }
    public decimal Progress { get; set; }
}

这样一来,所有CreateProgressDTO的实例都必须通过工厂类的方法生成,能更好地控制对象的创建规则。

附相关代码

CreateProgressDTO 类

public class CreateProgressDTO
{
    public int Total { get; set; }
    public int Created { get; set; }
    public decimal Progress { get; set; }
}

CreateProgressFactory 静态工厂类

public static class CreateProgressFactory
{
    public static CreateProgressDTO CreatedAll(int total)
    {
        return new CreateProgressDTO()
        {
            Total = total,
            Created = total,
            Progress = 100m
        };
    }

    public static CreateProgressDTO CreatedNone(int total)
    {
        return new CreateProgressDTO()
        {
            Total = total,
            Created = 0,
            Progress = 0m
        };
    }

    public static CreateProgressDTO CreatedExactly(int total, int created)
    {
        if (total == 0)
            return CreatedNone(0);

        return new CreateProgressDTO()
        {
            Total = total,
            Created = created,
            Progress = Math.Round((decimal)created / total * 100, 2)
        };
    }
}

内容的提问来源于stack exchange,提问作者dafie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:30:55