c # (wcf) файл архитектуры и структура каталогов (и создание экземпляров) - PullRequest
0 голосов
/ 04 мая 2009

Здравствуйте и спасибо за любую помощь.

У меня есть служба wcf, которую я пытаюсь правильно настроить.

Мне интересно узнать, есть ли лучший способ или реализовать структуру файлов и каталогов наряду с инстанциацией, есть ли более подходящий способ абстракции, который я могу пропустить?

Это лучший подход? особенно если производительность и способность обрабатывать тысячи одновременных запросов?

В настоящее время у меня есть такая структура:

-root \ Service.cs

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

<pre><code>public void UpdateCustomer(Customer customer)
{
     CustomerService customerService = new CustomerService(); 
     customerService.Update(customer); 
}
</code>

}

-root \ Клиент \ CustomerService.cs

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

<pre><code>public void Update(Customer customer)
{
    //DO SOMETHING
}

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

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

}

Примечание. Я не включаю в этот пример объект Customer или библиотеки DataAccess, так как меня интересует только служба.

Если бы вы могли либо дать мне знать, что вы думаете, если вы знаете лучший способ, либо ресурс, который мог бы помочь.

Спасибо, пожалуйста. Стивен

Ответы [ 3 ]

0 голосов
/ 04 мая 2009

Это может быть без ответа по ряду причин, но я предполагаю, что суть вопроса во многом будет с этим связана. Кроме того, немного сложнее анализировать проекты с небольшим контекстом. Здесь также много вопросов, усложняющих ответ.

Во-первых, вы упомянули несколько классов, которых нет в вашем примере кода. Я предполагаю, что Customer ссылается на CustomerService и аналогично для других упомянутых классов и примеров?

Вы спросили, есть ли лучший способ заявить о себе. Вы можете посмотреть шаблоны проектирования, например, шаблон «FlyWeight» и «Factory», чтобы помочь вам в этом. Я упоминаю «FlyWeight», потому что вы говорили о производительности.

Книга «Шаблоны дизайна» поможет вам. Кроме того, рефакторинг Мартина Фаулера (хотя и написан на Java) очень поможет.

0 голосов
/ 05 мая 2009

Я не знаю, что это лучшая (или даже рекомендованная) структура каталогов, но я остановился на этом.

.\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)

Исходя из этой структуры каталогов и того, что вы пока показали, класс Service будет помещаться в папку MyProject.Services.Service в каталоге MyProject.Services. Класс CustomerService будет находиться в папке MyProject.Services.Service.Support в каталоге MyProject.Services.

Я недостаточно работал с базами данных, чтобы понять компромисс между открытием нескольких одновременных соединений или простым повторным использованием одного и того же соединения снова и снова. Я предполагаю, что то, как вы это делаете, является предпочтительным решением.

И, учитывая, что вы откладываете свою обработку на базу данных каждый раз, когда вызывается ваша служба WCF (путем создания нового объекта CustomerService), вы могли бы извлечь выгоду из того, что ваша служба WCF станет одиночной. В общем, WCF-синглоны не одобряются по причинам масштабируемости, поскольку предполагается, что они разделяют состояние между различными вызовами службы и, следовательно, должны быть синхронизированы. Однако, как показано, ваша служба WCF не поддерживает состояние напрямую. Он просто обращается к базе данных для создания, обновления, удаления или извлечения клиента. Пока доступ к базе данных осуществляется с использованием соответствующей схемы блокировки, вы можете избежать накладных расходов, связанных с созданием каждого вызова вашей службы WCF. Чтобы сделать ваш сервис одиночным, используйте следующий атрибут в вашем сервисе:

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class Service : IService
{
}
0 голосов
/ 04 мая 2009

Я использовал фабрику программного обеспечения веб-сервисов и мне понравилась ее структура.

Структура в их примере кода была примерно такой:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...