Как создать конвейерный процесс в DDD?

1

У меня возникли трудности с определением процесса конвейера с использованием 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.

Большое спасибо!

Теги:
microservices
domain-driven-design
bounded-contexts

1 ответ

0

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню