我試圖以更好的方式組織我的職能和班級。目前,我有以下的初級班(注:所有這些類有很多的性質和功能,但對於澄清起見,我把它們洗乾淨所有的距離):爲我的C#項目提供更好的班級組織
internal class Class0{ }
internal class Class1: Class0 { }
internal class Class2: Class1
{
List<Class1> mainDataStructure;
}
我上面提到的類的組織非常好,但我主要關注的是下課。
public class Class3: Class2
{
InsertClass anInstance = new InsertClass();
public void Insert(Item item)
{
anInstance.mainDataStructure = mainDataStructure;
anInstance.Insert(item);
}
}
internal class InsertClass
{
List<Class1> mainDataStructure;
internal void Insert(Item item)
{
// adds item to mainDataStructure.
// some clean-ups using following function
// how to clean-up ? User will define it.
CleanUp();
}
// a function that use should implement
// define it as:
internal abstract string CleanUp();
// or as:
internal Func<string> CleanUp();
}
所以,當你發現,我的問題出現了,當我試圖定義一些類(例如,Class4
)操縱我的mainDataStructure
。我所能做的(就像我在這裏所做的那樣)是將mainDataStructure
傳遞給操縱它的類。雖然它有效,但對我來說它看起來並不高雅。我想知道是否有可能以更好的方式重組我的Class3
和Class4
。
此外,操縱mainDataStructure
(例如Class4
)的類有一些功能,應由最終用戶定義......我完全停留在那裏!如果我將函數定義爲abstract
,則用戶必須繼承該類並在子類中定義abstract
函數,或者如果我使用委託人Func<>
定義它們,則用戶必須通過函數定義。這些解決方案的主要關注點是該課程的可達性水平!我高度贊同公衆只有Class3
。因此,繼承是沒有問題的,對於委託,新組織應該有一種方法將功能定義從Class3
傳遞到Class4
。
我很感謝這個項目組織的任何幫助。
分類解釋
該項目是一個信息檢索項目。 mainDataStructure
存儲信息。 Class3
是有點用戶界面。用戶通過獲取這個類的一個實例來開始交互;並且通過該實例做所有事情(例如,添加新的信息,檢索,統計等)。 Class4
向mainDataStructure
添加新信息。 Class5
檢索存儲信息之間的某種相似性。 Class6
得到一些mainDataStructure
(例如,右尾概率) 等的統計數據等等。
例:增加一個新的信息項 使用Class3
的實例,並調用public void Add(Item item)
。然後該方法將使用Class4
的實例和它的internal void Add(Item item)
方法來處理所有新項目插入過程。參見修改的上述代碼
您的示例代碼不能幫助我理解您的問題,我不完全明白您要完成的任務。據我所知,你沒有通過數據結構。看來你正在設置一個屬性,然後調用一個函數來執行某些操作?嘗試閱讀關於依賴注入,控制反轉和純函數/關注分離的內容。 – AlexanderBrevig 2014-09-01 06:06:54
這是有點意見我認爲,但你的問題不太清楚。想到的兩件事是接口而不是抽象,還有一些依賴注入,所以你可以將你想要的東西傳遞給類。 – Noctis 2014-09-01 06:08:19
代碼組織和設計模式中的例子幾乎從來沒有ABC XYZ foobar,但從汽車,自行車,員工,客戶等方面來看,我從comp sci課程中學到了經驗。 – 2014-09-01 06:15:53