2013-05-30 5 views
1

Я хочу построить сервер для Point Of Sales, который будет на вершине Web Api asp.net Мой план состоит в том, чтобы иметь один контроллер для счетов.
Для обработки счетов от web-api-почты до sql-сервера я планирую использовать micro ORM PetaPoco.
Один счет будет написан в базе данных на трех таблицах. PetaPoco толкает меня на три «pocos» для каждой таблицы.
Я хочу записать эти три pocos в базу данных внутри транзакции.
Как я обуздал дизайн своего контроллера и классов, чтобы выглядеть красиво, также хорошо работает.Обработка данных транзакций в ASP.NET Web Api

Должен ли я?

  1. Заставьте мой контроллер принять три класса для параметров, возможно ли это на asp.net web api? Можно ли десериализовать с одного запроса три разных класса?
  2. Сделать мой контроллер одним классом, после этого на стороне сервера из этого класса сделать три pocos, которые будут записаны на сервер базы данных? Может ли кто-нибудь опубликовать, как wold выглядит как этот класс, который будет разделен на три части?
  3. Сделайте мой контроллер тремя способами для размещения отдельных данных (счетов-заголовков, счетов-платежей, счетов-статей) один за другим? Возможно, в этом случае будет так сложно иметь одну транзакцию для трех отдельных вызовов?
  4. Любой другой подход?
+0

Если вы публикуете подпись веб-API и структуру классов POCO, кто-то может помочь с дизайном класса контроллера. – aquaraga

+1

Это дерево или три в точке 1? – Fendy

+0

@Fendy три как номер 3, Google диск мой сумасшедший whit корректор орфографии. – adopilot

ответ

2

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

контроллер или метод обслуживания будет выглядеть следующим образом (очевидно, именование не велика - вам придется изменить его в соответствии с вашим доменным жаргоне):

public void AddBill(BillDTO bill) 
    { 
     //Map the DTO to your entities 
     var bill1 = mapper1.Map(bill); 
     var bill2 = mapper2.Map(bill); 
     var bill3 = mapper3.Map(bill); 

     //Open the transaction 
     using (var scope = db.Transaction) 
     { 
      // Do transacted updates here 
      db.Save(bill1); 
      db.Save(bill2); 
      db.Save(bill3); 
      // Commit 
      scope.Complete(); 
     } 
    } 
1

Вы должны прочитать о DTO модели, он ответит на некоторые из ваших вопросов:
1. WebAPI поддерживает его.
2. Это звучит как DTO, поэтому это хорошее решение, поскольку вы скрываете свою модель устойчивости от потребителя.
3. Нет смысла принуждать потребителя совершать три вызова, каждый вызов имеет собственную стоимость «инфраструктуры», поэтому лучше иметь одну инфраструктурную стоимость вместо одной.

+0

любые ссылки для DTO, пожалуйста, – adopilot

+0

вы можете начать здесь: https://github.com/ServiceStack/ServiceStack/wiki/Why-Servicestack Это от конкурентов WebApi, поэтому вы снимаете две вещи одним выстрелом - узнаете что-то о DTO и о альтернативе WebApi :) – Giedrius

+2

здесь оригинальное описание DTO: http://martinfowler.com/eaaCatalog/dataTransferObject.html – Giedrius

Смежные вопросы