首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WCF 服務設計規範(三):服務契約、資料契約與實例管理核心原則

     編輯:關於.NET

服務契約

  1. ServiceContract 標註於介面,而非類別:分離契約與實作。
  2. 契約名稱以 I 開頭:IMyContract。
  3. 避免屬性式操作:如 GetName/SetName,改用單一方法或資料契約。
  4. 避免單一成員契約:缺乏聚合價值。
  5. 每契約 3~5 個成員為宜:符合單一職責與介面隔離。
  6. 成員上限 20 個,12 個為實務極限:過大契約難以維護與版本控制。

資料契約

  1. 拒絕推斷式資料契約(POCO),明確套用 DataContract/DataMember。
  2. DataMember 僅標註於屬性或唯讀公共成員。
  3. 避免在自有型別上顯式使用 XML 序列化屬性。
  4. 避免訊息契約:除非需控制 SOAP 表頭/主體結構。
  5. 使用 Order 時,同一類別層級成員賦予相同順序值。
  6. 資料契約實作 IExtensibleDataObject,採用顯式介面實作:支援版本容錯。
  7. 保持 IgnoreExtensionDataObject = false(預設):保留未知資料以利向前相容。
  8. 委派與事件不可為資料成員。
  9. 操作參數避免 .NET 特有型別(如 Type):確保跨平台互通。
  10. 操作不接受/回傳 ADO.NET DataSet/DataTable,改用陣列等中立表示。
  11. 抑制泛型型別參數雜湊碼產生,提供可讀型別名稱。

實例管理

  1. 重視擴展性時優先採用 Per-Call(InstanceContextMode.PerCall)。
  2. 契約設 SessionMode.NotAllowed 時,服務必須設為 PerCall。
  3. 同一服務內勿混用會話與非會話契約。
  4. 避免單例,除非領域天然為單例(如硬體單一存取點)。
  5. 會話服務啟用有序傳遞。
  6. 會話服務避免實例停用。
  7. 避免分界操作(隱含呼叫順序相依)。
  8. 持久服務必須指定完成操作。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved