2011-10-07 49 views
1

我正在使用內容協商,因此根據請求的標題提供JSON/XML輸出。現在我想知道提供此功能的最佳位置是什麼。GUI,BLL或DTO中的JSON/XML輸出?

信息: BLL =業務邏輯層
DTO =數據傳輸對象
DAL =數據訪問層

僞碼例如用於DTO

class ExampleDTO{ 
    propertie name; 
    propertie description; 
} 

僞碼例如用於BLL

class ExampleBLL{ 
    GetExample(name) returns ExampleDTO; 
    GetExamples() returns List<ExampleDTO>; 
} 

1)在具有BLL-對象的GUI:從BLL變換DTO結果爲JSON/XML
2)在BLL:類似... getObjectJSON() - >變換&返回DTO輸入到JSON格式
3)在DTO:行爲像...的toJSON()toxml用於()像一個toString()
4)或額外的DTO的只有1 propertie(JSON/XML)
5)其他的東西? ...

*我個人認爲,(1)是錯誤的,保持邏輯出GUI的原因,(4)似乎矯枉過正有額外的DTO的喜歡WebJsonExampleDTO和A WebXmlExampleDTO只有一個propertie

回答

1

我會建議採用以下方法,假定您知道回覆哪個響應。

  1. 保持響應類型與BLL分開,因爲BLL不必對響應類型做任何事情。

  2. 你應該有一個層將接受兩個參數,一個響應類型和第二個將被調用的函數。

    • 這一層會給調用BLL
    • BLL將返回DTO
    • ,現在你得轉換DTO到請求的類型,即JSON/XML
    • 返回轉換DTO到卡利。
  3. 最後,您將有3+層GUI,轉換層和BLL。 BLL也將與DAL交互。

不管響應類型如何編寫代碼都會有優勢,例如可以有任意數量的響應類型。就像你可以擁有XML,JSON,而另一個可能是字符串或任何東西。你也會有更好的控制。

+0

所以,如果我正確理解你,你是在GUI和BLL之間添加變形金剛。 – Terence

+0

是的,還有種效用層。主要目標是讓架構保持一切,使得所有東西都可以插入,而不是相互依賴。 – paragy