c# - 员工限制

标签 c# architecture scheduling

我正在编写一个 C# 程序来处理调度。现在每个员工都需要对他们的日程安排有限制的能力,例如:

Sally 只能在周一、周三、周五上午 9 点到下午 3 点工作

Billy 只能在周二、周四和周日下午 5 点到 9 点工作

Sally 只能在周一、周三、周五上午 9 点至下午 3 点工作 直到某某日期,然后她可以在不同的时间和日期工作。

这些是我需要应用于每个员工对象的一些限制示例。我想要的是关于如何尽可能高效和通用地构建它的一些建议。显然,我将必须能够访问这些数据并能够应用这些限制。例如,当经理试图制定时间表时,他需要能够看到当他在星期二 4 点安排 Sally 时,他们是一个问题。另外,我应该如何存储每个员工的这些数据?

最佳答案

像这样:

public class Employee
{
    public string Name { get; set; }
    // other important info

    private List<WorkTime> _availability = new List<WorkTime>();
    public List<WorkTime> Availability
    {
        get { return _availability; }
        internal set { _availability = value; }
    }
}

public class WorkTime
{
    public DayOfWeek Day { get; private set; }
    public int StartHour { get; private set; }
    public int EndHour { get; private set; }

    public WorkTime(DayOfWeek day, int startHour, int endHour)
    {
        // validation here (e.g. day and time range during store hours, start<end, etc.)

        Day = day;
        StartHour = startHour;
        EndHour = endHour;
    }
}

并使用 LINQ(或 foreach)查询整个员工集合,并查询每个员工的可用性,以找到有时间上类的人。

创建一些实用函数(扩展)以根据您的业务规则比较 WorkTime 对象也很有用(例如,IsAvailable 比较两个 WorkTime 对象,如果它是相同的 DoW 且至少重叠 4 小时则返回 true)

并且您可能会将其存储在数据库中,因此使用类中的属性等字段对表进行建模。

关于c# - 员工限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1344531/

相关文章:

c# - 其中 T : <interface> into where T: class gives cs0452

c# - SQL 连接字符串提供程序名称

c# - MsBuild 在 Visual Studio Online 上找不到还原的 NuGet 包

c# 已经有一个与此命令关联的打开的数据读取器,必须先将其关闭

architecture - 现代 REST 应用程序是 3 层架构还是 4 层架构?

c# - 没有记录 - 抛出异常的地方

algorithm - 学生实验室分组、安排、匹配

rest - 微服务、amqp 和服务注册/发现

c++ - pthread调度问题

algorithm - 找到最佳点以切割一组间隔