一般而言,软件系统(通常)被分解为“层”(例如用户界面 (UI)、业务逻辑 (BL)、数据访问层 (DAL) 等)。这些层还提供了自然的整合场所。所以...
必须通过这种方式访问数据库上的数据还是我需要提供服务?
根据您所说,我认为其他系统应该通过服务或 API 进行集成。提供对数据库的直接访问权限意味着他们将避开应该应用于他们想要执行的交互的业务逻辑。在您的具体情况下,这也可能意味着他们会避开您的安全措施。
模块化
这有两个部分:
- 有助于模块化系统的架构风格和设计模式(特别是关于维护和可扩展性);这些都是与技术无关的(无论您使用什么技术)。
- 实施和技术特定的框架和技术。
设计模式
Wikipedia 是介绍模式的好地方,StackOverflow 也有很多很棒的内容。
我开始着手掌握所谓的SOLID,尽管它都很有用,但我认为您会发现 S、O、I 和 D 领域最有价值。
就模块化而言,依赖倒置(“D”)将与您特别相关。通过接口创建“合同”,您可以创建其他各方可以构建的东西 - 例如:他们可以将您的“默认”实现替换为他们制作的实现。
特定技术
我不能专门针对 Java 说话(尽管您应该很容易找到它),但 .Net 有一些专门为此类事物构建的框架,例如:托管可扩展性框架(MEF)。
关键是大多数技术堆栈将提供各种框架、工具和方法来构建模块化系统。