私がこのアプローチに反対するアドバイスをする理由はさまざまです。
一般的な設計ルールは、内部データモデルをユーザーに公開しないことです。このルールには多くの種類があり、階層化アーキテクチャがおそらく最もよく知られています。
詳細には、次のような問題があります。
- パフォーマンスの調整:生成されたWebサービスを制御できないか、ほとんど制御できないため、これを実現するのは困難です。あなたのアプリケーションが本当にあなたを引き受けているとき、この制限に苦しむでしょう
- サービスにアクセスする:RESTfulWebサービスを生成するのかWS-*サービスを生成するのかわかりません。後者は、iPhone経由でアクセスするときに問題が発生します。
- デザインプレイと同期Webサービス:パフォーマンスに何らかの形で関連しているのは、生成されたサービスが同期してブロックされている可能性が高いという問題です。これは、プレイフレームワークが採用している非ブロックアプローチとはうまく適合しません。
- 抽象化レベル:データベースはセットに基づいていますが、ビジネスモデルはそうではない可能性が高いため、適切なクライアントの開発、パフォーマンスの調整、適切な検証、セキュリティなどの問題が発生します。
- 認証、承認、およびアカウンティング:データベースはdbシステムユーザーしか認識していないため、実行が困難です。
- 変更:データベースモデルを変更した場合はどうなりますか?生成されたサービスは引き続き機能しますか?列を追加するだけで、それらのイベントを採用する必要がありますか?
- ..。
これらの理由のいくつかは重複していますが、一般的な問題は明らかであると思います。
このアプローチの代わりに、私は次のことをお勧めします。アプリのRESTfullエンドポイントを開発しますが、これはそれほど難しくありません。これは、クライアントが開発すべき外部契約です。たとえば、 play-miniには、これを行うためのフィルタリングされていないベースのAPIが非常に必要です。これを行う間、アプリが本当に必要とする操作に焦点を合わせます。CRUDは一般に、本番環境に対応したソフトウェアについて考える場合、悪いモデルです。
データベースにアクセスする方法は、あなたがしなければならないもう1つの決定ですが、外部契約ではないため、必要に応じて変更できるため、おそらくそれほど重要ではありません。