Я большой поклонник http://highscalability.com/, и я искал в своей текущей разработке, чтобы разложить мое приложение по функциональным границам в качестве пути к возможности масштабирования на стороне сервера, особенно на уровне базы данных. Это включает в себя реализацию различных функциональных компонентов приложения (у нас есть несколько отдельных модулей, которые клиенты могут использовать) в качестве своего собственного независимого приложения на сервере, клиент, который обращается к серверу, знает о различных службах, с которыми ему нужно связаться для получения различных данных, так унифицированное представление представлено пользователям.
Проблема возникает, когда существуют ссылки между данными в разных компонентах, то есть один компонент содержит все пользовательские данные, а другой должен ссылаться на пользователя как на владельца некоторого фрагмента данных. В настоящее время я делаю это, храня информацию о первичном ключе для каждой стороны ссылки (как если бы они все жили в одной базе данных), но эта таблица ссылок должна существовать в обоих компонентах, чтобы можно было выполнять поиск в В любом направлении, то есть «получить вещи, принадлежащие конкретному пользователю» и «получить владельцев этой конкретной вещи», каждый из них будет использовать разные компоненты. Альтернативой этому может быть сохранение данных ссылки только в одном из компонентов, но тогда обратный поиск потребует 2 вызова вместо одного.
У меня такой вопрос, является ли дублирование этих таблиц ссылок каким-то запахом кода, которого я должен избегать, или это именно то, как идут дела, когда вы разбиваете свое приложение по функциональным линиям, как это?