Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为日期时间范围对象层次结构建模_C#_Refactoring_Solid Principles - Fatal编程技术网

C# 为日期时间范围对象层次结构建模

C# 为日期时间范围对象层次结构建模,c#,refactoring,solid-principles,C#,Refactoring,Solid Principles,代码重构新手,我有一个简单的对象如下 public class TimeRange { public Guid Id { get; set; } public DateTime StartTime { get; set; } public DateTime EndTime { get; set; } } public class ActTimeRange : TimeRange { } p

代码重构新手,我有一个简单的对象如下

public class TimeRange
    {
        public Guid Id { get; set; }

        public DateTime StartTime { get; set; }

        public DateTime EndTime { get; set; }

    }

    public class ActTimeRange : TimeRange
    {

    }

    public class PlannedTimeRange : TimeRange
    {

    }

我在想,如果我应该通过减少两个子类来缩小这个类的层次关系,并用父类上的布尔属性替换它们,即IsPlanned,哪一个性能更好?

因为您似乎没有向ActTimeRange和PlannedTimeRange添加任何其他属性,所以最好使用这种模型:

public class TimeRange
{
    public Guid Id { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }
    public TimeRangeStatus Status { get; set; } = TimeRangeStatus.None;
}

public enum TimeRangeStatus
{
    None,
    Actual,
    Planned
}
我会避免将bool作为属性或字段,因为您最终可能会使用DoSomethingtrue、false等方法调用,这些都不是很清楚。最好是DoSomethingTimeRangeStatus.Actual,somethingTimeRangeStatus.Red


性能不应与任何方法有关。

使用OOP和层次结构时,您不需要使用诸如IsPlanned之类的bool,因为类型PlannedTimeRange表明它是计划的。这两门课是什么?他们需要从时间范围继承吗?如果不考虑继承性,那么需要拥有所有这些类的所有属性是什么?请你把密码或草图写在问题里好吗?这些课程是什么?目标是什么?@OlivierRogier-他在问是否应该放弃两个子类,只使用父类,但使用一个IsPlanned属性。这本质上是他的问题。