2009-03-01 30 views
1

我正在使用C#。我有一個產品類,如sku,名稱,說明....和setSku,setDescription,setImages(產品附有圖像)等方法。我在Product類中保留了這些方法,但由於客戶端提供了大量關於如何設置sku和描述以及圖像的設置,因此該類變得非常非常大。班內有很多代碼。因此,我打算將大型Product類分解爲ProductSku類,ProductDescription類等等。這裏的問題是,有一些需要被所有類訪問的相同字段。我開始在這些單獨的類上調用方法,並一次又一次地傳入相同的對象,但這看起來並不正確。所以現在我決定創建一個全局(使用Singleton模式)的CurrentProduct類,它具有我創建的所有其他Product類所需的字段。 我的問題是這聽起來是否正確,你會怎麼做?正確類的提示

我正在處理的程序只是在基本級別上從數據庫1中的一個表中獲取產品,並將產品保存到數據庫2上的表中。但是,用戶有很多設置可供他們使用,以便他們希望數據庫1中的字段在進入數據庫2時看起來如何。

要說明:上面引用的set和get方法不是getter和setter方法。我使用屬性,但是我稱它們爲set,因爲在更新之前有很多代碼將格式化一些字段。我理解了這種混淆,因此對於不澄清而道歉。

+0

是否有手動創建存取方法而不是使用屬性的原因? – strager 2009-03-01 03:25:46

回答

4

當前產品的單身聽起來很糟糕。你只是用一個不同的名字來調用一個全局變量。

我不知道Sku是什麼,但對於其餘的(描述和圖像),如果它們是產品屬性(我認爲它們屬於),它們屬於Product類。

如果你把你的「課堂作品」放在一起很多,這是一個強烈的信號,他們屬於一起。

如果您願意,可以使用partial關鍵字將代碼(不是類)分成多個文件。就像這樣:

// This file is Product.CodeAboutThingA.cs 

public partial class Product 
{ 
    // Some stuff related to A here... 
} 

而在另一個文件:

// This file is Product.CodeAboutThingB.cs 

public partial class Product 
{ 
    // Some stuff related to B here... 
} 
+0

我確實使用了set方法在所有用戶配置設置(並且有很多)中所使用的屬性,並且做了一些事情,例如,像在sku和skuModifier之間拼接sku一樣。 – jumbojs 2009-03-01 02:54:18

1

也許你應該考慮將它合併回一個類,但爲了使它可讀性使用部分修飾符?

另一個答案是創建抽象類產品並繼承它的專門類。

+0

是的,你可能是對的。這是我原來的方式,我改變了它,因爲即使部分它看起來很難閱讀。 – jumbojs 2009-03-01 03:00:10

2

給我0.5分錢,只能通過拆分爲諧音來管理具有相當長的一段代碼氣味的一類。 把整個事情分成幾個類聽起來不錯,特別是當你已經確定了諸如SKU等東西是它自己的類。

事情你應該問自己是...

  • 那是正確的,如果我只能通過有效的產品實例訪問的SKU?即使它只是一個標識符,這樣的標識符本身可能相當複雜。
  • SKU必須以什麼方式使用Product類中的內容?如果產品是實例化SKU的唯一產品,則可以將產品傳遞到SKU。這兩個類現在相當緊密,但仍然比沒有語義的單個產品混亂更好。
  • 您能確定需要共享的通用部件嗎?也許你錯過了一個實體或價值對象是「共同部分」?
  • 也許你會對產品開發者感到高興,而不是讓客戶在產品實例的內部周圍翻找?

從我的角度來看,當你有一個類的代碼1K +線,仍有缺什麼你的「產品」還真是不少的瞭解,它在應用程序的範圍如何表現?