SRPはSOLID原則の1つであり、各エンティティ(モジュール、サービス、クラス)は変更の理由を1つだけ持つべきことを意味します。アーキテクチャのレベルでは、責任領域ごとにシステムをサービス/モジュールに分割することでこれを達成します。たとえば、ユーザーを登録するための個別のサービス、支払いを管理するための別のサービス、通知を送信するための第三のサービスがあります。
Node.jsの例:
// userService.js module.exports = { registerUser(data) { /* 登録処理 */ } } // paymentService.js module.exports = { processPayment(order) { /* 支払い処理 */ } } // notificationService.js module.exports = { sendEmail(user, content) { /* メール送信 */ } }
重要な特徴:
SRPはサービスが他のサービスと相互作用できないことを意味しますか?
いいえ。サービスは、ビジネス操作に対する責任を保持しつつ、明確に定義されたAPIを介して相互作用できます。
ファイルやプロジェクトに分割せずにSRPを実現できますか?
技術的には可能ですが、スケーラビリティとコードの可読性のためには、物理的な単位(個別のファイル、パッケージ、サービス)に分割することをお勧めします。
SRPはコードだけに適用されるのか、それともアーキテクチャ全体に適用されるのか?
SRPは、サービス/モジュールの設計から特定のクラスや関数の記述まで、すべてのレベルで関連しています。