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