Как создать конвейерный процесс в DDD? - PullRequest
0 голосов
/ 15 октября 2018

У меня есть некоторые трудности в определении конвейерного процесса с использованием DDD.Мой сценарий следующий:

Существует 3 ограниченных контекста:

  • менеджер данных пациента: отвечает за получение и управление данными всего пациента, такими как mrna, mirna, dnaметилирование и т. д.

  • управление данными аннотации: это аннотация о гене, мирне, белках и т. д.

  • анализатор: этоспециальный анализатор, который использует данные некоторых пациентов и извлекает некоторую полезную информацию об этом.Кроме того, пользователь может создать конвейер и создать puglins, определяя некоторые дополнительные шаги для обработки с использованием данных пациента.Каждый шаг уникален и выполняет только одну работу, например:

    конвейер1: задача1 -> задача2 -> задача3 -> задача4 конвейер2: задача1 -> задача3 -> задача5 -> задача6

Каждая задача может генерировать некоторые данные, из-за этого задача должна управлять данными, считывать и записывать данные.

Я бы хотел уменьшить связь между задачами и задачами с менеджером данных пациента.контекст.

Например: задача1 должна получить данные в диспетчере данных пациента из-за объема данных.task1 получает некоторые данные, обрабатывает их, а затем получает дополнительные данные и обрабатывает снова.Результатом этого процесса являются некоторые данные, которые сохраняет задача1.

Затем следующая задача в конвейере - задача 3.Задача3 получить все данные из задания1.Модуль taks3 обрабатывает данные, в результате чего получаются другие данные.Задача 3 спасает их.Конвейер завершен.

Обратите внимание, что конвейер настроен перед запуском, а также для выполнения каждой задачи требуются некоторые данные и генерируются некоторые данные.

Я думал об использовании шаблона команды, чтобы получить данные в контексте диспетчера данных пациента.Что касается конвейера, у него есть фабрики для определения и настройки конвейера, и у каждой задачи есть команда для получения данных для обработки и команда для сохранения своих данных.

Я знаю, что это тесно связано, потому что команды.Я подумал об использовании шаблона хореографии с использованием сообщений, однако это действительно сложно реализовать из-за конвейера и объема данных в диспетчере данных пациента и объема данных, получаемых в результате каждой задачи.

Это нормально делать?Есть еще лучшее решение?

Код написан на python.

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

1 Ответ

0 голосов
/ 01 декабря 2018

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)
...