2012-02-20 15 views
2

我想重構一個解決方案,讓其他項目。 我有一個核心項目,其中跨項目的公共類位於。我如何設計一個特定的超類

我試着用2個假想項目simpify我的問題:假期和天氣...

我的假期項目,有以下2類文件加載過程設置:

public class Job 
{ 
    public virtual string CreatedBy { get; set; } 
    public virtual DateTime? CreatedDate { get; set; } 
    public virtual Security Security { get; set; } 

    protected IList<File> _files = new List<File>(); 
    public virtual IEnumerable<File> Files 
    { 
     get { return _files; } 
    } 
} 

public class File 
{ 
    public virtual string FileName { get; set; } 
    public virtual FileType FileType { get; set; } 
    public virtual FileStatusType FileStatusType { get; set; } 
    public virtual Job Job { get; set; } 
} 

除了Jobs類沒有Security屬性之外,Weather項目的文件加載過程與Holidays的結構完全相同。

我的問題是,是否有可能以某種方式將兩個類都移動到Core項目中,以允許兩個項目使用它們? 顯然Weather不需要Security屬性,所以我想我會有一個沒有Security的Core.Job類,然後在Holidays.Job中擴展Core.Job。

但是,一旦我這樣做了,在Core.File類中,它指的是什麼Job?由於它位於Core項目中,它必須是Core.Job。 那麼我會需要讓作業和文件坐在節假日中,並且天氣(以及任何其他未來的項目)都使用Core.Job和Core.File?

我不希望Core項目對子項目有任何引用。

我使用NHibernate,所以有映射文件 - 增加了複雜性。

希望這是非常明顯的

感謝

回答

1

不是很清楚爲什麼對你所提供的soluton混淆(假設我正確理解你)

//Core DLL 

public class Job 
{ 
    public virtual string CreatedBy { get; set; } 
    public virtual DateTime? CreatedDate { get; set; } 
    protected IList<File> _files = new List<File>(); 
    public virtual IEnumerable<File> Files 
    { 
     get { return _files; } 
    } 
} 
Hollidays

你有

public class HollidayJob : Job 
{ 
    public virtual Security Security { get; set; } 
} 

天氣只需使用Job類型,如果它自足。

在這種情況下,您可以參考Holliday項目CoreDLLWeather。當你通過NHibernate對它進行序列化時,它對於HollidayJob保存了一個字段,但當Weather讀取同一個表時,它會跳過該字段,因爲不知道任何內容,並且實際上並不關心它。

希望這會有所幫助。

+0

謝謝Tigran。但是File類看起來像什麼?正如在我上面的代碼示例中,文件類上有一個Job屬性。那麼,我需要一個包含HolidayJob的HolidayFile嗎? – 2012-02-21 15:38:47

2

你當然可以這樣做,但我不知道它是否給你帶來真正的好處:

  • 是否核心本身以任何方式基本Job工作?如果沒有,在每個項目中分別實施Job可能會幫助您保持耦合鬆散,即使我有點冗餘。在我寫的代碼中,我有時通過提取接口來引入不必要的依賴關係,而不會增加真正的好處。這就是爲什麼我有點謹慎。
  • 如果Core對它做了實際的工作,那麼重構到公共基地Job的部分可能就是它的工作接口。
  • 您可能會想到一個接口而不是基類。 Security可能在語義上屬於另一個接口。此外,你將你的課程的很多控制交給Core
  • 你是否曾經將一個工作從一個項目交給另一個(或者他們是否通過NHibernate映射到同一個數據庫表?)?如果你不這樣做,內部的冗餘類也可能沒問題。
+0

謝謝木瀆。在回答你的問題時:Core不適用於基本Job。工作不會從一個項目傳遞到另一個項目。你可以添加一些代碼來解釋你上面提到的冗餘接口的想法嗎?我遵循下面Tigran描述的模式,所以HolidayJob然後在File類中有IJob,它是Core.Job的接口。但是,這導致了以下nHibernate錯誤:來自表FL_File的關聯指向未映射的類:Core.FileLoad.IJob。謝謝 – 2012-02-21 15:44:24

+0

我沒有太明確表達。在我編輯第一點之前:「冗餘」僅僅意味着兩個單獨的「Job」實現,沒有什麼奇特的。不幸的是,我不太瞭解NHibernate。 – 2012-02-21 18:01:24

相關問題