私は作業パターンの単位でasp.net mvcとnhibernateを使用しています。何かがnullの場合これはどうすれば設計できますか?方法のNhibernate作業単位
私はだから私のif文でこの
public bool IsSomething()
{
unitOfWork.BeginTransaction();
var myGetStuff = repo.GetStuff(1);
if(myGetStuff == null)
{
return false;
}
var somethingElse = myGetStuff.GetSomethingElse();
if(somethngElse == null)
{
return false;
}
return true;
}
のようなものを持っていると私はちょうどの文から抜け出すヌルではない、それを必要とします。
これは、ネストされたif文がネストされているように4回または5回ネストされているように見えることと反対です。
public bool IsSomething()
{
unitOfWork.BeginTransaction();
var myGetStuff = repo.GetStuff(1);
if(myGetStuff != null)
{
var somethingElse = myGetStuff.GetSomethingElse();
if(somethngElse != null)
{
// some more check heere (could have another few if statements null checks here)
}
}
}
したがって、ifステートメントのネストされたレベルを読みやすくする最初の方法がわかります。
nhibernateでクエリを実行しても、はにする必要があります。トランザクションではラップし、最後にはロールバックまたはコミットしてください。
オプション1
public bool IsSomething()
{
unitOfWork.BeginTransaction();
var myGetStuff = repo.GetStuff(1);
if(myGetStuff == null)
{
unitOfWork.Commit();
return false;
}
var somethingElse = myGetStuff.GetSomethingElse();
if(somethngElse == null)
{
unitOfWork.Commit();
return false;
}
unitOfWork.Commit();
return true;
}
あなたはどこにでもコミット入れて維持するために持っているように、私は好きではないこの方法です。可能であれば、私は(私は仕事の取引の1単位以上のものを持っていない限り)一つだけのコミット持っているのが大好きだ
ついにこの
public bool IsSomething()
{
try
{
unitOfWork.BeginTransaction();
var myGetStuff = repo.GetStuff(1);
if(myGetStuff == null)
{
return false;
}
var somethingElse = myGetStuff.GetSomethingElse();
if(somethngElse == null)
{
return false;
}
return true;
}
catch(Exception ex)
{
unitOfWork.RollBack();
}
finally
{
unitOfWork.Commit();
}
}
のように入れていない理由それでは私はしかし私はこれが好きですが、コミットが失敗した場合に何が起こるかを認識しましたか?ロールバックされず、例外は捕捉されません。
だれでも他にもアイデアがありますか?
のように見えるのでしょうか? – Firo
メソッドによっては、読み込み/更新/挿入が混在している場合や、読み込みがあるだけの場合があります。 – chobo2