2010-11-11 53 views
2

我正在爲一本雜誌的網絡應用程序工作,該應用程序將允許用戶在線登錄和續訂訂閱。這些訂閱是根據一系列規則進行更新的,我希望得到關於如何設置這些規則的一些想法/建議。如何在數據庫中建模數據和邏輯?

此Web應用程序與具有用戶數據的外部(第三方)系統接口。當用戶登錄時,Web應用程序從第三方系統獲取一串信息,其中包括一個稱爲「訂閱定義ID」的數字,該數字(表面上)表示訂閱者擁有的訂閱類型。這種訂閱類型可能會過期幾年,所以Web應用程序包含一組「訂單規範」(存儲在數據庫中),它由當前訂閱選項以及當前速率等信息組成(因此價格可以是向訂單上的用戶顯示)。

我目前的想法是創建一個預訂定義ID表,該表映射到給定預訂定義ID更新的訂單規範。例如,訂閱定義ID可能表示10年前的1年訂閱,當時價格爲39.99美元;在數據庫中,這將映射到目前的訂單規格,其當前價格爲59.99美元。

這在理論上工作得很好,但像往常一樣,有一個問題。當訂閱定義ID在當天重新建立時,它們並不總是唯一的。具體而言,取決於上下文,一個訂閱定義ID具有非常不同的行爲。此訂閱定義ID用於1年訂閱和1年打折禮品訂閱。因此,鑑於這種訂閱定義ID,許多事情都可能發生:

  1. 如果它是一個1年訂閱,他會使用更新(當前)1年訂閱。
  2. 如果這是1年的特價禮品訂購,並且訂戶沒有續訂任何其他訂閱,它將作爲(當前)1年全價禮品訂購續訂。
  3. 如果這是1年的打折禮品訂閱,訂閱者正在續訂其他訂閱,則它將續訂爲(當前)1年折扣禮品訂閱。

我不知道如何在數據庫中概括這一點,特別是因爲這種併發症只有一個記錄發生。我基本上需要一種方法來模擬上面的邏輯,它也可以用於不是特殊情況的記錄。我總是可以在代碼中做到這一點,但我不願意將所有這些業務邏輯放在代碼本身中(特別是在未來發生問題時,以及其他訂閱定義標識)。

建立數據和邏輯規則組合的最佳方式是什麼?

回答

0

這裏的訣竅是參數化業務邏輯,這意味着創建一個參數表。一般情況是,任何類型的訂閱都有資格享受其他類型的續訂,因此您有一張將原始訂閱映射到合格續訂的表格。然後,您將擁有檢查用戶訂閱的一般代碼,並顯示1選項或續訂選項列表。

對於大部分的情況下,如果我理解你說的話,到原認購只映射到它自身。你只有這種情況,一些訂閱映射到特殊情況。

但是,如果你做這種方式,你有一個很好的通用更新系統,現在是管理員的控制之下,因爲他們可以修改映射,而無需等待爲您提供新的代碼。

+0

這基本上我最初的想法,但有一些... *醜陋*該進場,那就是,這種方法複雜的邏輯。 – mipadi 2011-01-27 17:31:38

+0

在我的經驗,*醜陋*邏輯也可以分解成參數(即表),如果以正確的方式看着。這是一個非常大的話題,但在評論中討論太大。我的博客(在我的個人資料中列出)進入了很多。 – 2011-04-13 01:55:04

0

這是不是我通常會建議,但因爲只有一個訂閱定義ID 這一直是數年(因此,這是一個穩定的業務規則)的情況下,我建議硬編碼這個ID的行爲。

+0

我想你可能是正確的,可惜......不過,這將是冷靜地聽到一些通用的解決方案,像這些問題。這不是我認識的很多領域。 – mipadi 2010-11-12 15:57:01