2011-01-05 47 views
0

我一直在嘗試構建一個使用noSQL數據庫運行的服務器端API。我對應用程序體系結構很陌生,因此我想就如何嘗試分離圖層提供一些反饋。我認爲引發我的一個主要部分是使用noSQL數據庫,它消除了必須預先定義數據模型的約束,同時要求數據的非規範化例程以確保數據可以快速查詢。4層應用程序體系結構 - 使用noSQL的服務器端API

我使用的是4層:

  • 數據層

    • 接受鍵入對象
    • 提供從關鍵
    • 對象提供對象的列表從查詢
    • 提供密鑰列表中的對象列表
    • 接受鍵控對象
    • 從關鍵
    • 器具非規範化基於模型多次定義(程序刪除對象名單,一些對象的部分是拷貝給他人,以加快查詢速度,因爲連接是不可能的與NOSQL)
  • 業務層

    • 提供業務邏輯
    • 強制執行權限
  • 模型層

    • 定義已知對象
    • Definies非正規化(什麼對象的部分被複制到其他部分)
    • Definies權限(哪些用戶可以在什麼情況下訪問什麼對象)
  • 表示層(RESTful的API)

    • 提供寧靜API爲所有資源/服務,包括
      • 訪問並修改對象
      • 置備新的用戶帳戶
      • 登錄到帳戶
      • API需要做的其他事情

我對如何我有這個成立了幾個問題:

1)我認爲,信息定義非規範化(如何以及何時一些ojects的副本中的其他對象提供)被模型定義的一部分,所以我有在模型中提供這些信息的例程。然而,實際上要做到這一點的層是數據層,特別是當信息被保存時,所以我把實現模型中的非規範化定義的例程放在數據層中。它是否正確?2)同樣,我也有模型中的權限(誰可以訪問什麼信息以及在什麼情況下)的定義。但業務層將負責將此信息傳遞給REST API,因此這是我強制執行權限的層。我沒有數據層強制執行權限,因爲雖然有些用戶可能無法直接訪問某些數據,但可以通過用戶執行的其他操作間接修改該數據(例如,更新該用戶的「last_login_time」屬性的簡單日誌記錄儘管用戶永遠無法修改該信息)這是正確的嗎?

3)這裏還有什麼我不正確的,一般來說我應該注意什麼或者我應該知道的其他東西?

4)我正在使用谷歌應用程序引擎,這是Java低級API的python。有一個我應該使用的框架已經處理了一些,特別是反規範化和權限?

謝謝!

回答

4

不知道數據有多複雜,爲什麼數據層與模型分離?我傾向於爲我的Google App Engine模型添加功能,以執行他們需要的任何操作,以便從業務層接收數據並將數據獲取到該業務層。

另外,你爲什麼計劃使用低級別的API而不是持久性助手使持久性像摔倒一樣容易?

我認爲您應該先回兩步,定義您嘗試解決的問題,並查看Google App Engine內置的解決方案。在告訴你如何去做之前,我需要關於你想要完成的事情的信息。

相關問題