С# один и тот же метод в разных классах с разной логикойC#

Место общения программистов C#
Ответить
Anonymous
 С# один и тот же метод в разных классах с разной логикой

Сообщение Anonymous »

Меня беспокоит небольшая проблема и просьба о помощи. Прежде всего, у меня есть 3 файла cs:
  • InfinityLoop.cs — хранит бесконечный цикл, который работает все время, когда программа включена. Это

    Код: Выделить всё

    s logic something like this: if it
    в новый день делай бла-бла-бла(кое-что)

Код: Выделить всё

public static class InfinityLoop
{
private static readonly TimeSpan CheckInterval = TimeSpan.FromSeconds(10);

private static DateTime _lastCheckDate = DateTime.Now;

public static async Task StartReminderLoop(ITelegramBotClient botClient, Update update)
{
while (true)
{
if (_lastCheckDate.Day != DateTime.Now.Day)
{
await ReminderBack.RemindPersonForBirthday(botClient, update);
_lastCheckDate = DateTime.Now;
}
await Task.Delay(CheckInterval);
}
}
}
[*]ReminderBack.cs — статический объект, имеющий только один метод, сравнивающий дату ввода пользователя и дату сегодняшнего дня.
< /ол>

Код: Выделить всё

public static class ReminderBack
{
public static async Task RemindPersonForBirthday(ITelegramBotClient botClient,
Update update)
{
var currDate = DateTime.Today;
var cache = update.GetCacheData();

foreach (var user in cache.ScheduleDict)
{
if (user.Value.Month.Equals(currDate.Month) && user.Value.Day.Equals(currDate.Day))
{
var message = $"Today is {user.Key}'s birthday!";
_ = await PRTelegramBot.Helpers.Message.Send(botClient, update, message);
}
else if (user.Value.Month.Equals(currDate.Month) && user.Value.Day.Equals(currDate.Day + 1))
{
var message = $"{user.Key}'s birthday is tomorrow!";
_ = await PRTelegramBot.Helpers.Message.Send(botClient, update, message);
}
}
}
}
3.CalendarCommandHandler.cs — в этом объекте нас интересует только один метод PickDate(). Первым делом он вводит выбранную дату в мессенджер, затем кэширует дату и после этого использует объект ReminderBack.

Код: Выделить всё

public static async Task PickDate(ITelegramBotClient botClient, Update update)
{
if (update.CallbackQuery?.Data is null)
{
return;
}

try
{
var command = InlineCallback.GetCommandByCallbackOrNull(update.CallbackQuery.Data);

var data = command.Data.Date;

var message = $"Picked date: {data:dd.MM.yyyy}[/b]";
await PRTelegramBot.Helpers.Message.Edit(botClient, update, message);

//caching date
var cache = update.GetCacheData();
cache.DateT = data;
CacheCommand.UpdateCache(update, cache.PersonName ?? "unknown", cache.DateT);

await ReminderBack.RemindPersonForBirthday(botClient, update);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
Итак, что не так?
Я хочу, чтобы один метод выполнял разную логику в разных классах, чтобы не писать другой аналогичный метод, потому что каждый раз, когда я вызываю метод PickDate, он перебирает словарь и проверяет всех людей, а не конкретного, с которым я работаю.
Ничего не использовал, просто нужен совет как чтобы сохранить код в чистоте и не писать похожий метод

Подробнее здесь: https://stackoverflow.com/questions/784 ... rent-logic
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»