以下代碼是否有異味?我正在重構一些代碼,並且發現了這個循環關係,其中foo需要一個需要foo自己實現的接口的類。在其構造函數中使用C# - 它聞到了嗎?
在真實的代碼中,foo是一個Silverlight UserControl,ifoo有方法來做UI類型的事情,比如提出一個對話框(例如ShowMessage
)。 needsAnIfoo
類是一種(類型)控制器,只要它想要對UI執行任何操作,它就會使用ifoo接口。我有不同的「主題」UI實現iFoo,並在其構造函數中具有相同的鍋爐板代碼。 needsAnIfoo
有各種屬性,這是UI的數據綁定(所以它也是一種模型)。
它編譯和運行良好,但我想知道是否有更好的方法。
那麼,它聞到了嗎?
interface ifoo
{
void bar();
}
class foo : ifoo
{
readonly needsAnIfoo _needsAnIfoo;
internal foo()
{
_needsAnIfoo = new needsAnIfoo(this);
}
#region ifoo Members
public void bar()
{
throw new NotImplementedException();
}
#endregion
}
class needsAnIfoo
{
readonly ifoo _myfoo;
public needsAnIfoo(ifoo foo)
{
_myfoo = foo;
}
}
static void Main(string[] args)
{
foo foo = new foo();
}
也許我應該新了needsAnIfoo
,而沒有經過IFoo的構造函數,然後給它iFoo
在Initialize
方法。但是這看起來很奇怪:
foo foo = new foo();
needsAnIfoo needsAnIfoo = new needsAnIfoo(foo);
foo.Initialise(needsAnIfoo);
感謝這個例子!我已經發布了我需要的一刻。 – 2009-11-10 01:42:24
兄弟能夠得到upvote嗎? :)我會立刻評論你的東西... – Josh 2009-11-10 03:40:09
最後upvoted你! (我正在審閱一些舊帖子和合並賬戶,所以我只記得這篇文章。) – 2011-01-09 20:51:03