1

PATCHオブジェクトを編集できるRESTスタイルのAPIを実装しています。この操作の目的はPATCH、クラス内の 1 つ以上のプロパティを、設定可能な他のプロパティに影響を与えることなく更新できるようにすることです。

ServiceStack OrmLiteページの部分的な更新の例ですが、 どのフィールドが部分的に更新されるかを示すためにハードコーディングが必要なようです。私のシナリオでは、送信するフィールドを決定するのは依存アプリケーション次第です。

オブジェクトがまだ永続化されていない可能性があるというシナリオにも対処する必要があります。

これを回避するために、以下を実装しました。

public object Patch(Myclass request)
{
    HttpStatusCode SuccessCode;
    try
    {
        var result = (MyClass)Get(request);
        if (result != null)
        {
            request.PopulateWithNonDefaultValues(result);
            dbFactory.Run(dbCmd => dbCmd.UpdateNonDefaults(request, r => r.myId == request.myId));
        }
        else
        {
            dbFactory.Run(dbCmd => dbCmd.Save(request));
        }

        SuccessCode = HttpStatusCode.Accepted;
    }
    catch (Exception e)
    {
        log.Error(e);
        SuccessCode = HttpStatusCode.InternalServerError;
    }
    return new HttpResult()
    {
        StatusCode = SuccessCode
    };
}

それは機能しますが、何かがおかしいと感じます。もっと良い方法があるに違いないと思いますか?

4

1 に答える 1

0

問題ないように見えますが、エラーが発生したときに C# 例外をスローするだけで、コードが大幅に短くなり、ServiceStack の新しい APIベースサービスクラスから継承している場合は、既に利用可能なDbプロパティを使用できます。

public object Patch(Myclass request)
{

    var result = (MyClass)Get(request);
    if (result != null)
    {
        request.PopulateWithNonDefaultValues(result);
        Db.UpdateNonDefaults(request, r => r.myId == request.myId);
    }
    else
    {
        Db.Save(request);
    }

    return new HttpResult
    {
        StatusCode = HttpStatusCode.Accepted
    };
}
于 2013-02-08T16:04:41.917 に答える