程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WCF服務編程設計規范(3):服務契約、數據契約和實例管理設計規范

WCF服務編程設計規范(3):服務契約、數據契約和實例管理設計規范

編輯:關於.NET

WCF服務編程設計規范(3):服務契約、數據契約和實例管理設計規范。本節涵蓋服務契約和數據契約設計規范,以及服務實例管理內容。中英對照版本,歡迎留言交流。

Service Contracts

服務契約

1.Always apply the ServiceContract attribute on an interface, not a class:

把ServiceContract屬性標記到契約接口上,而不是服務類上

//Avoid:避免
[ServiceContract]
class MyService
{
[OperationContract]
public void MyMethod()
{...}
}
//Correct:正確
[ServiceContract]
interface IMyContract
{
[OperationContract]
void MyMethod();
}
class MyService : IMyContract
{
public void MyMethod()
{...}
}

2.Prefix the service contract name with an I:

服務契約名稱以I開頭

[ServiceContract]
interface IMyContract
{...}

3.Avoid property-like operations:

避免定義與屬性類似的操作

//Avoid:
[ServiceContract]
interface IMyContract
{
[OperationContract]
string GetName();
[OperationContract]
void SetName(string name);
}

4.Avoid contracts with one member.

避免契約裡只包含一個成員

5.Strive to have three to five members per service contract.

每個契約裡盡量保證3-5個成員

6.Do not have more than 20 members per service contract.Twelve is probably the practical limit.

每個服務契約裡成員不要超過20個。12個也許久應該就是極限

Data Contracts

數據契約

1.Avoid inferred data contracts (POCO).Always be explicit and apply the DataContract attribute.

避免使用推測性的數據契約。明確使用DataContract屬性定義數據契約。

1.Use the DataMember attribute only on properties or read-only public members.

只在屬性或者只讀的成員上使用DataMember屬性

2.Avoid explicit XML serialization on your own types.

自己的類型上明確使用XML序列化標記

3.Avoid message contracts.

避免使用消息契約

5.When using the Order property, assign the same value to all members coming from the same level in the class hierarchy.

當使用Order屬性的時候,對於類層次相同的所有成員賦相同的值

6.Support IExtensibleDataObject on your data contracts.Use explicit interface implementation.

數據契約支持IExtensibleDataObject。使用明確地實現接口。

7.Avoid setting IgnoreExtensionDataObject to true in the ServiceBehavior and CallbackBehavior attributes.Keep the default of false.

避免在ServiceBehavior和CallbackBehavior屬性裡把IgnoreExtensionDataObject 設置為true。保持默認的false

8.Do not mark delegates and events as data members.

不要使用委托和事件作為數據成員

9.Do not pass .NET-specific types, such as Type, as operation parameters.

不要傳遞.NET-specific類型,比如Type,作為操作參數。

10.Do not accept or return ADO.NET DataSets and DataTables (or their type-safe subclasses) from operations.Return a neutral representation such as an array.

不要接受或者返回ADO.NET DataSets和DataTables (或它們的類型安全的子類)。返回一個中立的數據形式,比如數組。

11.Suppress the generation of a generic type parameter hash code and provide a legible type name instead.

不要產生泛型類型參數的哈希值,使用一個易懂的類型名稱作為替代。

Instance Management

實例管理

1.Prefer the per-call instance mode when scalability is a concern.

當考慮到可伸縮性的時候,使用Per_Call模式,單調模式。

2.If setting SessionMode.NotAllowed on the contract, always configure the service instancing mode as InstanceContextMode.PerCall.

如果在契約上設置了SessionMode.NotAllowed,通常會把服務實例模式設置為InstanceContextMode.PerCall

3.Do not mix sessionful contracts and sessionless contracts in the same service.

不要在一個服務裡把會話契約和非會話契約混用。

4.Avoid a singleton unless you have a natural singleton.

避免使用單例模式,除非理所當然地應該使用單例模式。

5.Use ordered delivery with a sessionful service.

盡量在會話服務裡使用順序傳遞。

6.Avoid instance deactivation with a sessionful service.

避免在會話服務裡停止服務實例

7.Avoid demarcating operations.

避免分布操作(比如有先後順序的操作。)

8.With durable services, always designate a completing operation.

在持久化服務裡,通常指定一個完成操作。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved