Во многих умных книжках пишут, что следует разбивать систему на более мелкие и простые части (подсистемы|пакеты).
Рассмотрим простой пример (возможно не самый лучший).
Допустим, нам нужно разработать API для сервиса по поиску фильмов (наподобие кинопоиска).
Предположим, мы решили, что нам нужно хранить следующую информацию:
Фильмы
- Название
- Описание
- Дата релиза
- Жанр[]
- Страна[]
- Люди[] (актеры/продюсеры и т.д.)
- Рейтинги[]
Жанры
Страны
Люди
- ФИО
- Пол
- Дата рождения
- Дата смерти (если умер)
- Биография
Рейтинги
- Стороняя система (IMDB, кинопоиск)
- Рейтинг
Я бы разделил систему с такими данными на следующие модули:
1. Фильмы (фильмы, жанры, страны) - основные данные о фильмах
2. Люди
3. Сторонние системы и рейтинги
В моем представлении, если модулю нужно работать с БД, он должен иметь свою собственную БД. Если же БД одна, то модуль должен знать только о пренадлежащих ему таблицах и ни в коем случае не должен обращаться к таблицам чужих модулей.
Возникает вопрос: предположим, нужно предоставить пользователям API возможность получения фильмов, в которых принимал участие какой-то человек.
Или нужно отсортировать фильмы по рейтингу IMDB. Модуль фильмов не должен знать ничего о модуле рейтинга. Как быть в этой ситуации?