Отделение сервиса ServiceStack от бизнес-логики

1

У меня есть вопрос о том, как правильно подойти к разделению службы веб-API от бизнес-логики, особенно при использовании стека служб. Код, который я пытаюсь улучшить, похож на следующий:

public class TenantService : Service
{
   public object Post(TenantRequest req)
   {
       //create an instance of the struct to hold the data
       TenantObject tenant = new tenant{ //set properties from the resquest};
       TenantRecord.InsertRecord(tenant)
       // create a response after this //
   }  
}

то в моей бизнес-логике у меня есть что-то похожее на следующее:

public class TenantRecord
{
    public static void InsertRecord(TenantObject tenant)
    {
         //Instantiate a new Tenant POCO
         Tenant newRecord = new Tenant
         {
         Id = 1, Name = tenant.Name, CreatedDate = DateTime.Now, ...//And so on
         };
         db.Insert(newRecord);
     }
  }

Это приводит к массивной головной боли, связанной с постоянным повторным написанием того же кода, что и основной код, но постоянное создание структур для передачи информации назад и вперед вызывает тонну отображения данных. Кроме того, в некоторых случаях один запрос должен обрабатывать множество различных типов информации.

Должна ли бизнес-логика ссылаться на API и передавать сам запрос, или этот метод является наиболее подходящим? Любая помощь будет оценена.

Теги:
servicestack

1 ответ

4
Лучший ответ

ServiceStack предоставляет методы расширения AutoMapping, которые упрощают сопоставление объектов DTO с вашей моделью, поэтому вам не нужно вручную настраивать отношения.

Таким образом, ваш метод Insert просто становится:

public class TenantService : Service
{
    public object Post(TenantRequest req)
    {
        var tenant = new Tenant { CreatedDate = DateTime.Now }.PopulateWith(req);
        Db.Save(tenant);
        return new { Id = tenant.Id };
    }
}

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

  • 1
    редактировать выглядит хорошо :)
  • 1
    Мне нужно было дальнейшее разделение, но этот ответ идеально соответствовал потребностям проекта.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню