gpt4 book ai didi

c# - 实现非日期驱动的重复

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:40:06 26 4
gpt4 key购买 nike

我正在开发一个应用程序,当用户需要对各种设备执行预防性维护时,它会向用户发出实质性的提示。每件设备(称之为工具)都有不同的循环模式。有些将基于时间,例如每 90 天,而另一些则基于其他因素,例如使用情况。例如,某个特定工具在被 check out X 次后可能需要 PM。

所有工具都分配给个人,因此当该用户登录应用程序时,我需要显示当时需要 PM 的工具列表。当 PM 完成时,这些项目会从列表中删除,并且在其他情况下(例如日期更改或工具被重新检入库中),工具将被添加。

我从将返回此列表的服务方法的设计入手,并希望通过我用来解析列表中的项目的方法寻求一些帮助。对于输入,我将拥有用户的标识符和当前日期。由此我需要查询工具列表,并根据它们的重复模式、上次执行 PM 的时间以及自上次 PM 以来发生的事件,确定该项目是否应该出现在列表中。

希望这是有道理的。我很感激任何关于我应该如何处理这个逻辑的想法和指导。

最佳答案

为了结束,我想我会用我的努力结果更新帖子,尽管我对 Brandon 和 Florian 的回答表示赞赏,因为他们让我走上了正确的道路。

正如 Brandon 所建议的那样,我最终得到了一个名为 IHaveRecurrence 的接口(interface),定义如下:

public interface IHaveRecurrence
{
DateTime? LastOccurrence { get; }
RecurrenceType RecurrenceType { get; }
Int32 RecurrenceValue { get; }
Boolean IsDue();
}

我的 MaintainableTool(基)类现在实现了这个接口(interface)。 IsDue 方法是通过委托(delegate)给 Recurrence 类来实现的:

public Boolean IsDue()
{
return Recurrence.IsDue(this);
}

Recurrence 是 Fl​​orian 建议的抽象基类。我有几个子类,例如 DailyRecurrence、WeeklyRecurrence 等。每个子类都对应于 RecurrenceType 枚举中的一个值,并通过 IHaveRecurrence 接口(interface)根据 RecurrenceValue 和 LastOccurrence 属性实现适当的逻辑来确定 PM 是否到期。

Recurrence 使用内部 RecurrenceFactory 类来解析使用哪个子类:

internal sealed class RecurrenceFactory
{
public Recurrence GetRecurrence(RecurrenceType type)
{
switch (type)
{
case Daily: return new DailyRecurrence;
:
}
}
}

并且 Recurrence 实现为:

public abstract class Recurrence : IDisposable
{
public static Boolean IsDue(IHaveRecurrence recurringObj)
{
using (var recurrence = RecurrenceFactory.GetRecurrence(recurringObj.RecurrenceType))
{
return recurrence.GetIsDue(recurringObj);
}
}

protected abstract Boolean GetIsDue(IHaveRecurrence recurringObj);
}

然后,例如,DailyRecurrence 类实现为:

public sealed class DailyRecurrence : Recurrence
{
protected override Boolean GetIsDue(IHaveRecurrence recurringObj)
{
if (recurringObj.LastOccurred.HasValue)
return recurringObj.LastOccurred.AddDays(recurringObj.RecurrenceValue) <= DateTime.Now;

return true;
}
}

我喜欢这个模型,因为它具有高度可扩展性,封装了解决每个重复模式所需的逻辑,并使我的业务对象保持干净。

关于c# - 实现非日期驱动的重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5515314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com