Проблемы с наследованием, с#
Предположим, у меня есть базовый абстрактный класс Функция это выглядит примерно так:
public abstract class Function { public abstract string Invoke(string[] args); }
А еще у меня есть детский подкласс DeterministicFunction это выглядит примерно так:
public abstract class DeterministicFunction : Function { private readonly Dictionary<string[], string> _cache; public sealed override string Invoke(string[] args) { if (args?.Length > 0) { string fnResult; if (_cache.TryGetValue(args, out fnResult)) return fnResult; fnResult = GetResult(args); _cache[args] = fnResult; return fnResult; } return GetResult(args); } protected abstract string GetResult(string[] args); }
Все функции могут быть либо детерминированными, либо недетерминированными.
Детерминированная функция всегда возвращает один и тот же результат для одной и той же комбинации аргументов, поэтому я решил оптимизировать ее, поместив результат в кэш, чтобы, если дорогая функция вызывается с уже вызванными аргументами, она могла кэшировать результат и получать его быстрее. У меня также есть куча недетерминированных функций, связанных с датой и временем. Они недетерминированы, потому что возвращаются
разные результаты с каждым вызовом. Мой базовый класс для функций даты и времени:
public abstract class DateTimeFunction : Function { private CultureInfo _culture; protected DateTimeFunction(CultureInfo culture) { _culture = culture; } protected CultureInfo Culture => _culture; } public class UtcNowFunction : DateTimeFunction { // skip constructor code, too long to type public override string Invoke(string[] args) { DateTime now = DateTime.NowUtc; string result = now.ToString(Culture); if (args?.Length > 0) { string format = args[0]; result = now.ToString(format, Culture); } return result; } }
Мой вопрос заключается в следующем: нужно ли мне создавать базовый класс для всех недетерминированных функций? На данный момент я не вижу причин добавлять новый абстрактный уровень, но было бы логично разделить их на две основные группы. Если я создам новый абстрактный класс NonDeterministicFunction - там будет пусто. Что же мне делать??
Что я уже пробовал:
Я не создавал подкласс NonDeterministicFunction потому что я сейчас, только сейчас не вижу причин делать это. Но я действительно забочусь о логическом дизайне, и было бы логично разделить абстрактную сущность на разные группы