Разработка сервиса для работы с карточкой

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

  1. Создаем интерфейс, описывающий функциональность будущего сервиса:

    public interface INetstatSolutionService
    {
     NetstatSolutionCard.ObjectModel.NetstatSolutionCard CreateCard(string name, string address, int type); (1)
    
     ObjectModel.NetstatSolutionCardJournal AddJournalEntry(NetstatSolutionCard.ObjectModel.NetstatSolutionCard card, DateTime date, bool result); (2)
    }
    1 Создание новой карточки.
    2 Добавление результата проверки в журнал.
  2. Добавляем класс, реализующий интерфейс INetstatSolutionService и наследующий от ContextService — базовый класс сервисов объектной модели:

    internal class NetstatSolutionService : ContextService, INetstatSolutionService

    Специально ограничиваем область видимости класса, т.к. контекст объектов предоставляет сервис по его интерфейсу.

  3. Реализуем функциональность, описанную интерфейсом INetstatSolutionService.

    Реализацию смотрите в проекте решения.

  4. Создаем фабрику сервисов в виде класса, наследующего от ServiceFactory. Фабрика предоставляет экземпляр сервиса по его типу.

    public class NetstatSolutionServiceFactory : ServiceFactory
    {
     protected override object GetService(Type serviceType)
     {
      if (serviceType = typeof(INetstatSolutionService)) (1)
      {
       return new NetstatSolutionService();
      }
      return null;
     }
    }
    1 Метод должен вернуть экземпляр класса, реализующего INetstatSolutionService, по интерфейсу.

После реализации фабрики сервисов, можно собрать проект и подключить библиотеку, содержащую сервис (интерфейс, реализацию) и фабрику сервисов, к проекту и запросить данный сервис из контекста объектов, если фабрика сервисов зарегистрирована в контексте объектов (см. пример инициализации контекста объектов).

Типы и интерфейс, разработанные для сервиса, собраны в папке Services проекта NetstatSolutionCard.