一般的に、ソフトウェアシステムは(通常)「レイヤー」(ユーザーインターフェイス(UI)、ビジネスロジック(BL)、データアクセスレイヤー(DAL)など)に分割されます。これらのレイヤーは、統合するための自然な場所も提供します。それで...
データベース上のデータへのアクセスはこの方法で行う必要がありますか、それともサービスを提供する必要がありますか?
あなたが言ったことから、他のシステムはサービスまたはAPIを介して統合する必要があると思います。データベースに直接アクセスできるということは、実行したいインタラクションに適用する必要のあるビジネスロジックを回避することを意味します。あなたの特定のケースでは、それはおそらく彼らがあなたのセキュリティ対策を回避することを意味するでしょう。
モジュール性
これには2つの部分があります。
- モジュラーシステムを支援するアーキテクチャスタイルとデザインパターン(特にメンテナンスと拡張性に関して)。これらはすべてテクノロジーに依存しません(使用しているテクノロジーは関係ありません)。
- 実装およびテクノロジー固有のフレームワークと手法。
デザインパターン
ウィキペディアはパターンを紹介するのに最適な場所であり、StackOverflowにはパターンの周りにもたくさんの素晴らしいコンテンツがあります。
私は、 SOLIDとして知られているものを理解することから始めますが、それはすべて有用ですが、最も価値のあるS、O、I、およびDの領域が見つかると思います。
依存性逆転の原則(「D」)は、モジュール性に関する限り、特にあなたに関係があります。インターフェイスを介して「契約」を作成することにより、他の関係者が構築できるものを作成します。たとえば、「デフォルト」の実装を自分たちが作成したものと交換できます。
テクノロジー固有
私はJavaについて具体的に話すことはできませんが(簡単に見つけることができるはずですが)、.Netには、この種の目的のために特別に構築されたフレームワークがいくつかあります。たとえば、Managed Extensibility Framework(MEF)です。
重要なのは、ほとんどのテクノロジースタックは、モジュラーシステムを構築するためのさまざまなフレームワーク、ツール、およびアプローチを提供するということです。