Мне нужно создать систему, которая будет взаимодействовать с различными системами наших клиентов. Будет доменный уровень, который будет выполнять различные вычисления, но для простоты, давайте перейдем только к одной функции с именем «GenerateToken», которая имеет алгоритм для создания токена доступа.
У нас разные клиенты, использующие разные версии API. Чтобы было проще визуализировать, я попытаюсь объяснить на примере:
1.Company A is X type of customer – uses API v.1.0
2.Company B is X type of customer – uses API v.1.1
3.Company C is Y type of customer – uses API v.2.0
4.Company D is Z type of customer – uses API v.1.0
5.Company E is X type of customer – uses API v.1.1
6.Company F is Z type of customer – uses API v.2.0
Если версии API и типы компаний совпадают, это означает, что способ генерирования токена одинаков. Например; Функция «GenerateToken» будет принимать те же параметры и иметь тот же алгоритм для 2-го и 5-го случаев в примере.
«GenerateToken» является лишь примером, и в будущем у него будет гораздо больше вычислений, что означает, что одной из самых важных вещей будет расширяемость (принцип открытого закрытия) для дизайна.
Мой вопрос заключается в том, что я не мог решить, с какой архитектурой или шаблоном дизайна мне следует идти. Я могу создать родительский класс с «GenerateToken», а затем переопределить его из дочерних функций (Polymophism) или использовать что-то похожее на «Factory Method Pattern». Однако в этих случаях мне нужно будет создать класс почти для каждого типа компании с версией API (класс TypeXApiV1.0, TypeXApiV1.1, TypeYApiV1.0 и т. Д.), Что выглядит глупо.
Что бы вы предложили для этого решения или есть какой-то шаблон проектирования, который я могу использовать. Я надеюсь, что смогу объяснить ситуацию. Если я что-то упускаю или не могу четко объяснить, пожалуйста, дайте мне знать. Спасибо.