В общих чертах, программные системы (как правило) разбивается на «слои» (например, пользовательский интерфейс (UI), бизнес-логика (BL), уровень доступа к данным (DAL) и т. Д.). Эти слои также обеспечивают естественные места для интеграции. Так что ...
доступ к данным в базе данных имеет быть этим путем, или мне нужно предоставить услугу?
От того, что вы сказали, я думаю, что другие системы должны интегрироваться через службу или API. Прямой доступ к базе данных означает, что они будут дополнять бизнес-логику, которая должна применяться к взаимодействиям, которые они хотят выполнить. В вашем конкретном случае это, вероятно, также означает, что они будут мешать вашим мерам безопасности.
Модульность
Существует две части к этому:
- Архитектурные стили и шаблоны проектирования, которые помогают модульные системы (specifcially относительно технического обслуживания и расширяемости); все эти технологии являются агностиками (неважно, какую технологию вы используете).
- Реализация и конкретные технологии и технологии.
Шаблоны
Википедии является отличным местом, чтобы получить введение в шаблоны, и StackOverflow имеет много большого содержания вокруг них тоже.
Я начинаю понимать, что называется SOLID, хотя все это полезно. Я думаю, что вы найдете области S, O, I и D большей ценности.
Инверсия зависимостей («D») будет особенно важна для вас по мере модульности. Создавая «контракт» через интерфейс, вы создаете что-то, что могут использовать другие стороны, например: они могут поменять вашу реализацию по умолчанию на тот, который они сделали.
Technology Specific
Я не могу говорить конкретно для Java (хотя это должно быть легко для вас find out), но .Net имеет несколько механизмов, которые специально построены для такого рода вещи, например: Managed Extensibility Framework (MEF).
Дело в том, что большинство технологических стеков будут предлагать различные рамки, инструменты и подходы для построения модульных систем.
Внедрите интерфейс, удобный для вас и третьего лица. Мы не можем знать без дополнительной информации. –