シナリオ:
- スタック:Java、Spring、Hibernate。
- モデル:クライアントサーバーアプリケーション。
- パターン:Model-View-Controller(MVC)。
サービス層クラスには3つの動作があります。
一部のサービスには、メソッド内にビジネスルールがあり、永続性をアプリケーションに委任します。お気に入り:
EntityManager.save(entity);
一部のサービスは、単純にデータベース関数(パラメーターを渡す)を呼び出します。
CallableStatement cls = con.prepareCall( "{call databaseFunction(args)}");
一部のサービスには、両方の動作を持つメソッドがあります。
私の質問:
- アプリケーションサービスに直接データベース機能を呼び出しても問題はありませんか?これは悪い習慣ではありませんか?このようなプロジェクトに適用できるアーキテクチャモデルは何でしょうか?
- 同じサービスで動作が混在することに問題はありますか?トランザクションや一貫性など?
- メンテナンスの場合、このカプセル化により、開発者はデータベースの機能も変更する必要があることがわかりにくくなりますか?これを回避するには?
- このシナリオは世界中の他のアプリケーションで発生しますか、それとも単なるアーキテクチャ上のエラーですか?