1

Web Api asp.net の上にある POS 用のサーバーを構築したい 私の計画は、請求書用のコントローラーを 1 つ持つことです。
Web API ポストから SQL サーバーへの請求書を処理するために、micro ORM PetaPoco を使用する予定です。
1 つの請求書が 3 つのテーブルでデータベースに書き込まれます。PetaPoco は、各テーブルに 3 つの "poco" を用意するように促しました。
これら 3 つの poco をトランザクション内のデータベースに書き込みたいと思います。
コントローラーとクラスをうまく設計する方法もうまくいきます。

するべきか ?

  1. 私のコントローラーがパラメーターの 3 つのクラスを受け入れるようにします。これは asp.net Web API でまったく可能ですか? 1 つのリクエストから 3 つの異なるクラスを逆シリアル化できますか?
  2. 私のコントローラーに1つのクラスを受け入れさせ、その後サーバー側でそのクラスからデータベースサーバーに書き込まれる3つのpocoを作成しますか? 誰かが 3 つの部分に分割されるクラスのように見える方法を投稿できますか?
  3. コントローラーに、個別のデータ (請求書ヘッダー、請求書支払い、請求書記事) を 1 つずつ投稿するための 3 つの方法を持たせますか? おそらく、この場合、1 つのトランザクションで 3 つの別々の呼び出しを行うのは非常に難しいでしょうか?
  4. 他のアプローチはありますか?
4

2 に答える 2

2

私は間違いなくオプション 2 を使用します。Web クライアントは実装の詳細にとらわれない必要があるためです。つまり、1 つのテーブルに永続化するか、3 つのテーブルに永続化するかは、クライアントにとって重要ではありません。

コントローラーまたはサービス メソッドは次のようになります (明らかに、ネーミングは適切ではありません。ドメイン用語に従って変更する必要があります)。

    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();
        }
    }
于 2013-05-30T07:40:00.077 に答える
1

DTO パターンについて読む必要があります。質問のいくつかに答えることができます
。 1. WebAPI はそれをサポートしています。
2. これは DTO のように聞こえますが、持続性モデルをコンシューマから隠すための優れたソリューションです。
3. コンシューマーに 3 つの呼び出しを強制する意味はありません。各呼び出しには独自の「インフラストラクチャ」コストがあるため、インフラストラクチャ コストは 1 つではなく 1 つにすることをお勧めします。

于 2013-05-30T07:48:15.957 に答える