2009-04-25 89 views
1

舉個例子:共享域邏輯?

CreateOrderTicket(ByVal items As List(Of OrderItems)) As String 

你會在哪裏把這種邏輯給出:

CreateOrder should generate a simple list (i.e. Item Name - Item Price) 
PizzaOrderItem 
SaladBarOrderItem 
BarOrderItem 

你會推薦: 重構共同的抽象類/接口與共享屬性的方法稱爲CreateOrderTicket

創建公開的公共服務一個CreateOrderTicket

我們顯然不會要三種createOrderTicket方法,但添加方法,繼承,重載和使用泛型似乎是一個成本高,只是抽象的行爲..

承擔一個簡單的例子的目的是(目前)沒有OrderItem基類或界面..

幫助!! :)

p.s.有沒有辦法重載而不強制所有的繼承對象使用相同的名稱?

回答

1

在這種情況下,抽象基類聽起來像是最好的選擇。當然,這一切都取決於這些項目具有什麼樣的共享行爲。不知道更多,我想所有這些訂單項都有名稱和價格 - 例如 - 將來您可能會添加更常見的東西。

如果沒有包含Name和Price屬性的共享基類,則可能會遇到實現CreateOrderTicket方法的麻煩,該方法採用包含多於一種訂單的列表。

另外我不認爲從抽象基類繼承將是高成本,因爲技術上已經從對象基類派生的對象。 (雖然我不認爲這完全等於自定義基類)

VB.Net可以使用與接口中指定的名稱不同的名稱來實現接口中的方法,但不要認爲相同用於重寫抽象功能。

+0

是的,這是我的第一個想法,但我傾向於迴避基類,更傾向於接口。但是爲了擁有一個共享功能,沒有其他方法可以做到這一點,我可以看到。 接口..在多個位置實現它 BaseClass ..重載或包裝受保護的屬性(用於不同的名稱) 「邏輯服務」...仍然需要了解參數是什麼進來的,所以仍然需要抽象接口或BaseClass。 希望其他人有辦法決定何時一種方法是最好的,何時可以有一個基類(因爲你只能有一個。) – 5x1llz 2009-04-29 17:28:32