2011-01-05 4 views
0

私は、noSQLデータベースを使用して動作するサーバー側APIを設計しようとしています。私はアプリケーション・アーキテクチャーが初めてであるため、レイヤーをどのように分離しようとしたかについてのフィードバックがほしいと思います。私は、データを素早く検索できるようにするために、データに非正規化ルーチンを必要とすると同時に、定義済みのデータモデルを事前に持つ必要がなくなるという制約を取り除くnoSQLデータベースを使用することが大変なことだと思います。4層アプリケーションアーキテクチャ - noSQLを使用したサーバー側API

  • データ層

    • キーの受付オブジェクト
    • クエリ
    • からオブジェクトのリストを提供し、キー
    • からオブジェクトを提供します:

      私は4層を使用しています

    • キーのリストからオブジェクトのリストを提供します。
    • キー付きオブジェクトのリスト
    • が加入が不可能であるため、モデルの定義(何度も、いくつかのオブジェクトの部分に基づいて、鍵
    • を実装の非正規化ルーチンからのオブジェクトがクエリをスピードアップするために、他人にコピーされている削除受け入れ
  • ビジネス・レイヤー)のNoSQLと

    • は、ビジネス・ロジックを提供します
    • は権限
    • を強制
  • モデルレイヤ

    • 既知のオブジェクト
    • に(オブジェクトの部分が他の部分にコピーされているもの)
    • Definiesの非正規化
    • Definies権限を(定義どのユーザーがすることができますどんな状況でどのオブジェクトにアクセスする)
  • プレゼンテーション層(RESTfulなAPI)

      • へのアクセスと変更オブジェクトを含むすべてのリソース/サービス
      • アカウント
      • へのログイン
      • 新しいユーザーアカウントをプロビジョニングするために安らかなAPIを提供します
      • APIが「行う」必要なもの

私は、これは設定している方法についていくつか質問があります:

1)私は情報が非正規化を定義すると信じている(いつ、どのようにいくつかのojectsのコピーが)他のオブジェクトで利用されて作られていますモデルの定義の一部であるため、モデルにこの情報を提供するルーチンがあります。しかし、実際にこれを行う必要があるレイヤーはDatalayerです(情報が保存されるとき)。そのため、モデルにある非正規化定義をデータレイヤーに実装するためのルーチンを記述します。これは正しいです?

2)同様に、モデル内のパーミッション(どの情報にアクセスでき、どのような状況で誰にアクセスできるか)の定義もあります。しかし、ビジネス層はこの情報をREST APIに渡す責任があります。したがって、これは私が権限を強制している層です。一部のユーザーは一部のデータに直接アクセスできない場合がありますが、そのデータはユーザーが実行する他のアクションによって間接的に変更される可能性があります(たとえば、単純なログインによってそのユーザーのlast_login_timeプロパティユーザーは自由にその情報を変更することはできませんが)これは正しいですか?

3)ここに私が間違っているものはありますか、それとも私が知っておくべきであることに気を付けるべきものが一般的ですか?

4)私はこれにJavaの低レベルAPIのいずれかのPythonを使用しています。私が使用しているはずのフレームワークは、このうちのいくつか、特に非正規化とパーミッションを扱っていますか?

ありがとうございます!

答えて

4

データの複雑さを知らずに、データレイヤーをモデルから分離する理由は何ですか?私はGoogle App Engineモデルに機能を追加して、ビジネス層との間でデータを受け取り、データを取得するために必要な機能を実行する傾向があります。

また、永続性を低下させるような永続性ヘルパーの代わりに、低レベルのAPIを使用することを計画しているのはなぜですか?

私はあなたが解決しようとしている問題を定義し、それを解決するためにGoogle App Engineがどのようなものを組み込んでいるかを確認する必要があります。私は、あなたがそれを行う方法を伝える前に、あなたが達成しようとしていることに関する情報が必要です。

関連する問題