2010-02-24 57 views
0

我想聽聽你對這個問題的設計有什麼看法。我必須編寫webservice以允許用戶修改數據庫中的字典。有關設計的幾個問題

我的XML模式,看起來像這樣(它的簡化):

AdminService這是一個根,有選擇有:

  • AddCode [@DictionaryName,@code,@Description]
  • RemoveCode [@DictionaryName,@code,@Description]
  • DeleteCode(@dictionaryName,@code,@Description]

問題是,對於一些字典,有超過這些2個屬性被插入 - 有時他們包含一個額外的代碼,這將是硬編碼(它更復雜,但我簡化了它,爲了這個問題,一般來說代碼對於每個字典將是不同的)。這裏是我的:

在開始傳入XML使用Jaxb轉換成Java對象,他們通過我這個Java對象< - 它已經以這種方式實現,我不能改變它。

這裏是我的一部分:

我有一種路由器,它包含的註冊服務的列表(我使用Java,spring,hibernate的)。在這個路由器裏面有一個方法,用於驗證從xml創建的對象是否包含AddCode Obj或RemoveCode Obj。基於和字典的名稱,它使用的註冊服務來處理該請求的一個,因此,例如不存在像服務:

class Add[DictionaryName]CodeService implements Service { 
    execute(ObjectfromXML); 
} 

這是用來創建代碼,當請求與CreateCode元素來了。目前,此服務返回的內容(java obj或xml響應)超出了範圍。

的問題是,使用的方法,我將需要創建像3類:

添加[DictionaryName] CodeService, 刪除[DictionaryName] CodeService, 刪除[DictionaryName] CodeService。

添加新字典時。

這也意味着,我需要每次將這3個服務添加到路由器並且路由器的大小將增加。我想知道是否應該添加一組類,並按照以下方式執行此操作或使用其他方法。

路由器將只包含3服務AddCodeService,RemoveCodeService,DeleteCodeService和AddService將含有用於添加特定代碼的所有服務,即添加[DictionaryName1]服務,添加[DictionaryName2]服務等

任何想法?我也有命名類的問題...我試着有一個DictionaryService而不是路由器,並添加[DictionaryName] CodeAction,而不是添加[DictionaryName] CodeService,但服務&路由器聽起來更好 - 任何意見呢?

+0

拉米雷斯,試圖改寫你的問題標題更具描述性。 – 2010-02-24 17:52:49

+0

有什麼方法可以改變它嗎?我不能看到一個選項 – Ramires 2010-02-24 18:03:47

+0

嗯,這是什麼問題?你不應該問名稱,因爲你會更好地瞭解它,並且以後可以重構它們。總是試圖完成它(確保單元測試),如果這樣做可以增強您的設計並且單元測試通過... – Karussell 2010-02-24 19:56:36

回答

0

您需要提供更多信息。從給出的信息來看,我不明白爲什麼每個詞典需要單獨的類。如果每個字典的邏輯不同,我會爲每個字典提供一個「DictionaryService」,它處理所有不同的方法add/delete/remove。然後,您可以使用註冊表(映射)來查找用於特定字典的服務。