2011-11-09 98 views
2

所以,我試圖開始使用UML類圖,並且嘗試對一些現有代碼進行建模。比方說,我有這樣的:我是否正確地在UML中表示依賴注入?

public interface IDataContextWrapper : IDisposable 
{ 
    //blah blah blah 
} 

public class DataContextWrapper<T> : IDataContextWrapper where T : DataContext, new() 
{ 
    //blah blah blah 
} 

public class ArtistRepository 
{ 
    L2SDCWrapper.Interfaces.IDataContextWrapper dataContext; 

    public ArtistRepository() 
     : this(new DataContextWrapper<ChinookDataContext>()) 
    { 
    } 

    public ArtistRepository(IDataContextWrapper dc) 
    { 
     dataContext = dc; 
    } 

    //blah blah blah 
} 

我想出這個:

done using visual studio modeling tools

我的顧慮:

  • 如何正確關係圖的構造函數注入(我認爲這就是你所說的)在ArtistRepository類中?我覺得我的圖表不能準確表示它。
  • 如何正確地繪製DataContextWrapper的類聲明?

回答

1

試圖在UML中表示實現的每個細節通常不是一個好主意。 UML更適合於描述設計,據我所知,C#或其他大多數語言都沒有標準化的UML配置文件(=適配)。

這就是說,這裏的兩個指針:

  1. 依賴是相當弱的,非特異性的連接。兩個 接口應該通過泛化(繼承)連接。
  2. UML允許表示泛型/模板/參數化類。建模這些類的具體細節取決於您使用的工具。
  3. 無參數ArtistRepository構造函數實際上創建了一個匿名類的對象。如果您願意,您可以在類圖中表示該類,但是如果您真的想進入該詳細程度,最好爲構造函數繪製一個序列圖。

這裏是沿着這些線路的類圖,在Sparx Systems的企業架構師得出:enter image description here

注意參數DataContextWrapper和抽象的DataContext。它沒有被包含在代碼示例中,但我認爲它是一個抽象類;如果它實際上是一個界面,那麼關係應該是實現而不是泛化。

我建立了ArtistRepository的兩個版本,一個使用屬性,另一個使用直接關聯來表示直流成員。這兩個語義在UML中是等價的。

我只從DataContextWrapper和ChinookDataContext中的一個繪製了依賴關係,但這只是這個例子不會太混亂;無論你選擇哪種代表都應該有兩種關係。

我還沒有建立由ArtistRepository構造函數創建的匿名類。對於一個概述,我認爲這是很多。