我有2個項目:第一個項目是一個結構項目,我從一個XML文件讀取。
該項目中的其他解決方案 第二個項目(其他的解決方案:1)使用與上組件列表運行的foreach結構項目上工作:C#和設計模式 - 需要一個優雅的解決方案,以解決常見問題
namespace FriendProject.Workers
{
public class Worker
{
static void Main(string[] args)
{
foreach (Component component in ComponentList)
{
DoWork(component);
}
}
}
}
今日DoWork的方法執行以下操作:
public void DoWork(Component component)
{
// Doing work on component properties
// Zip component files with open source Zipper
if (component is DBComponent)
{
// work on DBComponent properties
}
}
現在,如果你熟悉設計模式,你可以看到這裏有個注射點以下要做到:
public class Component
{
public virtual void DoWork()
{
// Do work
}
}
public class DBComponent : Component
{
public override void DoWork()
{
base.DoWork();
// injection point - work on DBComponent properties
}
}
public class Operator
{
static void Main(string[] args)
{
foreach (Component component in ComponentList)
{
component.DoWork();
}
}
}
問題是,持有組件和DBComponent的項目是一個結構項目,在其他解決方案和其他項目中使用,我需要將開放源代碼Zip dll添加到項目中,並且它變得更緊密地耦合到目前的項目(「FriendProject」)和可用性較差。不談論其他項目將永遠不會使用這些方法(DoWork的在組件和DBComponent)
有沒有太大變化設計一個更好的解決方案?我應該添加一個Adpater嗎?
如果是這樣,請提供例子。
感謝所有
編輯:簡短的問題
2個項目:
一個是項目經理作用於第二個項目。
其次是一個結構項目(從XML讀取數據),可以與其他項目重用。
我想在結構項目(第二個項目)中添加方法和引用(自多態性以來)。然而,它感覺不對,因爲使用它的其他項目將永遠不會使用這些方法和添加的引用。
有沒有更好的解決方案,如何做到這一點?
編輯:
刪除了結構項目代碼縮短了問題。此代碼是無用的,因爲它的類(Component和DBComponent)接下來出現。
有問題的短版嗎?我不確定我在所有這些文本和代碼之間是否有重要的一點。 –
@DanielHilgarth我用一個簡短的問題編輯了這個問題。不過,我在上面添加的細節應該考慮到整個圖片。謝謝 – liorafar