2009-05-04 66 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 
{ 
}