我有一個方法,我想在抽象意義上是「事務性」。它調用了兩個發生在數據庫中的方法,但這種方法並不知道。方法知道太多的方法調用
public void DoOperation()
{
using (var tx = new TransactionScope())
{
Method1();
Method2();
tc.Complete();
}
}
public void Method1()
{
using (var connection = new DbConnectionScope())
{
// Write some data here
}
}
public void Method2()
{
using (var connection = new DbConnectionScope())
{
// Update some data here
}
}
由於實質TransactionScope
意味着一個數據庫事務將被使用,我們在那裏可以很好地提升爲分佈式事務,如果我們從池中獲取兩個不同的連接問題。對於這樣一個目的
public void DoOperation()
{
using (var tx = new TransactionScope())
using (var connection = new DbConnectionScope())
{
Method1();
Method2();
tc.Complete();
}
}
我做DbConnectionScope
自己,所以我不必須通過連接對象子方法:
我可以在ConnectionScope包裹DoOperation()
方法解決這個問題(這是比我真正的問題更人造的例子)。我從這篇文章的想法:http://msdn.microsoft.com/en-us/magazine/cc300805.aspx
不過,我不喜歡這個解決辦法,因爲它意味着DoOperation
現在擁有的知識,它的調用方法可以使用連接(也可能是不同的每個連接)。我如何重構這個來解決這個問題?
一個想法,我想的是創造一個更一般的OperationScope
,這樣當有一個自定義的溫莎城堡的生活方式聯手我會寫,會用意味着要求OperationScopeLifetyle
容器的任何組件總是會得到相同的該組件的實例。這確實解決了這個問題,因爲OperationScope
比DbConnectionScope
含糊不清。
什麼?有人投票贊成這個問題被關閉?爲什麼? – 2010-01-23 01:30:14