Загрузка объекта из нескольких источников данных с гексагональной архитектурой (порты и адаптеры) - PullRequest
0 голосов
/ 12 ноября 2018

Описание

Я работаю с почти 40-летним проектом с большим количеством устаревшего кода. На протяжении многих лет было добавлено несколько баз данных. Теперь я постепенно преобразовываю его в шестиугольную архитектуру с портами и адаптерами.

До сих пор я всегда создавал 1 адаптер для каждой базы данных. Но выполнение этого кода даст мне представление о моей структуре базы данных в моем домене (чего я не хочу).

Пример

Если в моем домене есть объект Product, который может выглядеть следующим образом:

public class product()
{
public decimal Price {get; set;}
public string Description {get; set;}
public string Name {get; set;}

}

В этом сценарии возможно, что цена исходит из базы данных 1, базы данных формы описания 2 и имени из базы данных 3. Все связаны уникальным кодом.

Вопрос

Как бы я это сделал в гексагональной архитектуре? Должен ли я:

  • make 1 productAdapter с несколькими хранилищами (по 1 на каждую базу данных)

  • сделать адаптер для каждой базы данных и объединить все в мой домен (который дает код моего домена, который связан с моим databasestructure)

  • сделать адаптер для каждой базы данных и productAdapter, который вызывает адаптеры базы данных?

Надеюсь, описание, пример и вопрос имеют смысл

1 Ответ

0 голосов
/ 18 ноября 2018

Прежде всего, вы должны определить в своем приложении порт для сохранения продукта. Чтобы сделать это, вы должны спросить себя, с точки зрения приложения:

Имеет ли значение в моем приложении то, для решения проблемы, которую оно пытается решить, хранятся ли концепции в продукте в нескольких хранилищах данных или только в одном?

  • Если это имеет значение, вы должны определить 3 порта (по одному для каждого хранилища данных). Вы бы объединить данные в вашем приложении. Поскольку для вашего приложения важно, чтобы концепции хранились в разных местах, ваше приложение это знает, оно является частью вашего приложения.

  • Если это не имеет значения, вы должны определить только один порт для абстрагирования постоянства. И определите один адаптер для порта. Адаптер будет обращаться к базе данных, которая ему нужна, в зависимости от свойства (цена, описание, имя), которое вы получаете. Я бы не стал абстрагировать доступ к этим базам данных в адаптере, создав еще 3 адаптера. Я хотел бы получить доступ к 3 дБ непосредственно из адаптера продукта. Но это зависит от вас.

...