2009-05-04 51 views
0

您好,非常感謝您的幫助。c#(wcf)體系結構文件和目錄結構(和實例化)

我有一個wcf服務,我試圖正確modularize。

我很想知道是否有更好的方法或實現文件和目錄結構以及instanciatation,是否有更適當的抽象方法,我可能會失蹤?

這是最好的方法嗎?特別是如果性能和處理成千上萬的同時請求的能力?

目前我有這樣的結構如下:

-root \ Service.cs

 
public class Service : IService 
{ 
    public void CreateCustomer(Customer customer) 
    { 
     CustomerService customerService = new CustomerService(); 
     customerService.Create(customer); 
    }

public void UpdateCustomer(Customer customer) 
{ 
    CustomerService customerService = new CustomerService(); 
    customerService.Update(customer); 
} 

}

-root \用戶\ CustomerService.cs

 
pulbic class CustomerService 
{ 
    public void Create(Customer customer) 
    { 
     //DO SOMETHING 
    }

public void Update(Customer customer) 
{ 
    //DO SOMETHING 
} 

public void Delete(int customerId) 
{ 
    //DO SOMETHING 
} 

public Customer Retrieve(int customerId) 
{ 
    //DO SOMETHING 
} 

}

注:我沒有在這個例子中包含Customer Object或DataAccess庫,因爲我只是conc對此服務有所瞭解。

如果你能讓我知道你的想法,如果你知道更好的方式,或者可以幫助你的資源。

謝謝。 Steven

回答

0

我使用了web服務軟件工廠並喜歡它的結構。

在他們的示例代碼中的結構是這樣的:

BYA.Mfg.SCM.Svc.WCF 
    Source 
    Business Logic 
     BYA.Mfg.SCM.Svc.WCF.BusinessEntities 
     BYA.Mfg.SCM.Svc.WCF.BusinessLogic 
    Resource Access 
     BYA.Mfg.SCM.Svc.WCF.DataAccess 
    Service Interface 
     BYA.Mfg.SCM.Svc.WCF.DataContracts 
     BYA.Mfg.SCM.Svc.WCF.FaultContracts 
     BYA.Mfg.SCM.Svc.WCF.MessageContracts 
     BYA.Mfg.SCM.Svc.WCF.ServiceContracts 
     BYA.Mfg.SCM.Svc.WCF.ServiceImplementation 
    Tests 
0

這可能是unanswer對於很多原因,但我想這個問題的廣度會有很多用它做。另外,它在分析設計時很少有上下文的挑戰。這裏也有很多問題,使答案變得複雜。

首先,您提到了幾個不在您的示例代碼中的類。我會假設客戶引用CustomerService,同樣對於其他提到的類和示例?

你問是否有更好的方法安裝。您可能需要查看「FlyWeight」模式和「工廠」模式等設計模式來幫助您。我提到「FlyWeight」是因爲你談到了性能。

設計模式書會幫助你。此外,Martin Fowler的重構(雖然用Java編寫)將會有很大的幫助。

+0

fooMonster。 感謝您的幫助,您是正確的,我在示例中提供了大量信息。 我編輯了這個問題,如果你有機會再看一遍,我會很感激。 謝謝,史蒂文 – stevenrosscampbell 2009-05-04 19:46:08

0

我不知道這是最好(甚至推薦)的目錄結構,但這是我現在已經解決了。

.\MyProject 
|----\bin 
|----\MyProject         (main application) 
|----\MyProject.Core       (shared libraries) 
|----\MyProject.Server       (WCF-hosting Windows service) 
|----\MyProject.Services      (the WCF services) 
|---------\MyProject.Services.Service1   (WCF Service1) 
|---------\MyProject.Services.Service1.Support (WCF Service1-specific libraries) 
|---------\MyProject.Services.Service2   (WCF Service2) 
|---------\MyProject.Services.Service2.Support (WCF Service2-specific libraries) 

在此基礎上的目錄結構,你已經證明,到目前爲止,該服務類將走在MyProject.Services.Service文件夾中的MyProject.Services目錄下的東西。 CustomerService類將位於MyProject.Services目錄下的MyProject.Services.Service.Support文件夾中。

我還沒有足夠的瞭解打開多個併發連接或只是一遍又一遍地重複使用相同的連接之間的權衡數據庫工作。我的猜測是,你這樣做的方式是首選解決方案。

的,而且是你推遲你的處理,每個WCF服務被調用時(通過創建一個新的CustomerService對象)的數據庫,你可能會受益於讓你的WCF服務單。一般來說,WCF單身人士由於可擴展性的原因而不滿,因爲他們假設他們在不同的服務調用之間共享狀態,因此必須同步。但是,如圖所示,您的WCF服務不會直接維護任何狀態。它只是訪問數據庫來創建,更新,刪除或獲取客戶。只要數據庫訪問使用適當的鎖定方案,就可以避免與WCF服務的每次調用實例相關的開銷。要使您的服務成爲單身人士,請在您的服務中使用以下屬性:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)] 
public class Service : IService 
{ 
}