У меня возникли трудности с определением процесса конвейера с использованием DDD. Мой сценарий следующий:
Существует 3 ограниченных контекста:
диспетчер данных пациентов: ответственный за получение и управление данными пациента, например, mrna, mirna, dna methylation и т.д.
управление данными аннотаций: это аннотация о генах, mirna, белках и т.д.
анализатор: это specfic анализатор, который использует некоторые данные пациента и извлекает полезную информацию об этом. Кроме того, пользователь может создать конвейер и создать puglins, определив некоторые дополнительные шаги для обработки данных пациента. Каждый шаг уникален и выполняет только одну работу:
pipe1: task1 → task2 → task3 → task4 pipeline2: task1 → task3 → task5 → task6
Каждая задача может генерировать некоторые данные, из-за этого задача должна управлять данными, считывать и записывать данные.
Я хотел бы уменьшить связь между задачами и taks с контекстом диспетчера данных пациента.
Например: task1 должен получать данные в диспетчере данных пациента из-за количества данных. задача1 получает некоторые данные, обрабатывает их, а затем получает больше данных и обрабатывает их снова. Этот процесс приводит к некоторым данным, которые сохраняет задача 1.
Затем следующей задачей в конвейере является task3. Task3 получает целые данные из задачи1. Такс3 обрабатывает данные, получая в результате другие данные. Задача 3 сохраняет их. Трубопровод закончен.
Обратите внимание, что конвейер настроен перед запуском, а также каждой задаче нужны некоторые данные для работы и генерирует некоторые данные.
Я думал об использовании шаблона команды, который получает данные в контексте диспетчера данных пациента. О конвейере у него есть фабрики для определения и настройки конвейера, и каждая задача имеет команду для получения данных для обработки и команды для сохранения своих данных.
Я знаю, что плотная связь, потому что команды. Я думал об использовании шаблона хореографии с использованием сообщения, однако это очень сложно реализовать из-за конвейера и количества данных в диспетчере данных пациента и объема данных, которые каждая задача выполняет.
Это нормально? Есть еще лучшее решение?
Код находится в python.
Большое спасибо!
DDD никак не конфликтует с конвейерами. Вопрос несколько гипотетический, но я постараюсь ответить на него как можно лучше. Технически вы можете просто иметь общий интерфейс задачи, который выполняет задачу, специфичную для домена. Например, см. Приведенный ниже шаблон.
class DomainTask1:
def __init__(self):
pass
def run(self):
# do something
class DomainTask2:
def __init__(self):
pass
def run(self):
# do something else
def run_pipeline(pipeline):
for task in pipeline:
task.run()
pipeline = [
DomainTask1(),
DomainTask2()
]
run_pipeline(pipeline)