2009-04-15 179 views
1

我有一個控件,我們可以根據一些業務規則顯示一些指向不同網站的鏈接。目前,所有構建鏈接列表的業務邏輯都處於控制之中。 我打算從控件中移出總線邏輯。設計問題

這將是一個很好的設計? 我可以使用任何設計模式嗎?

回答

1

你不應該太思考模式。大多數情況下,它們都是過度殺傷性的,並且增加了太多的複雜性。特別是像這樣一個微不足道的場景。

只是利用良好的面向對象的做法,你會沒事的。將業務邏輯封裝在另一個類中,併爲您的控件提供公共屬性以訪問它。把事情簡單化!

+1

我相信在這種情況下思考模式可能實際上會導致更簡單的解決方案。 – 2009-04-15 22:14:13

0

我不知道你是如何實現你的業務規則,但這裏是一個想法...

我將你的數據綁定Web表單列表控件。

public class YourLinks 
{ 

    // You could do it by overloading the constructor... 
    // Again not sure how you determine what links should be displayed... 
    // If you had consistent types you could make your constructor internal 
    // and then create a YourLinkBuilder see below... 
    public YourLinks(User user, Region region) 
    { 

    } 

    public YourLinks(City city) 
    { 

    } 

    // Databind to this method... 
    public IEnumerable<string> GetLinks() 
    { 
     // return your links... 
    } 

} 

public class YourLinkBuilder 
{ 
    public static YourLinks BuildPowerUserLinks() 
    { 
     return new YourLinks(new PowerUser(), new Region("Washington")); 
    } 

    public static YourLinks BuildVisitorLinks() 
    { 
     return new YourLinks(new VisitorUser(), new Region("Empty")); 
    } 
} 
0

鑑於所提供的信息很少,我建議您創建一個僅包含鏈接(及其相關數據)的模型。以便您可以將LinksModel傳遞給您的視圖進行渲染。或者將您的LinksModel傳遞給您的現有模型(作爲子模型)。

無論哪種方式,所有這些數據都被封裝。因此,如果您想稍後向其添加數據,它不會更改您的方法簽名(或一般合同)。如果你想從中刪除數據,相同的優勢。如果你想完全刪除它,它只有一個對象,並簡化了刪除。

您也可以構建鏈接視圖渲染器,以便它只知道如何直觀地顯示LinksModel。因此,在您的視圖中,您可以將鏈接信息的視覺方面委派給此類呈現器,而不是在現有視圖中具有邏輯。如果您想要更改鏈接視圖的外觀,或希望賦予用戶選擇不同渲染的力量,則可以簡單地使用不同的渲染器,而不是用'if'塊阻塞整個代碼。

Jeach!

0

當然,您應該使用Model-View-Presenter。在看來,你應該有你的控制權。
控件的責任應該僅僅是從用戶那裏接受輸入,驗證它並將該信息傳遞給演示者。然後,演示者應該與存儲業務規則的模型進行交互。

從模型中,您可能希望返回隨後傳遞給控件進行顯示的鏈接,或者您可能希望返回一些傳遞給另一個系統以檢索鏈接的元數據。

我會做的是在模型中使用策略模式,以便您可以輕鬆地調換和調出不同版本的業務規則。

要抽象與後端數據源的交互(如果有的話),請查看Martin Fowler的網關模式。

1

你真的需要一個自定義控件嗎?

Model-View-Controller建議您在控件中只顯示邏輯。

找到一個解決方案,允許您對內置控件(ListView)進行微小更改並在其他地方創建自定義數據集以傳遞給它。