簡體   English   中英

如何使我的代碼可擴展以備將來使用

[英]How can I make my code extendable for future use

我正在嘗試構建我的代碼,以便將來可以輕松擴展它,但是我認為我想得太多了,並且正在努力實現這一目標。

我的場景是:根據傳遞給我的一些數據,我需要生成一個類。 我需要生成的類本質上與任何其他類都不相似。

例如,我有幾個可以創建的類:

public class File1{
   public string Name {get;set;}
   // etc...
} 
public class File2{
   public int ID {get;set;}
   // etc...
} 
public class File3{
   public string MyType {get;set;}
   // etc...
} 

在我的主要課程中,我有:

switch (myExtension)
            {
                case ".abc":
                    ProcessABC(myContents);
                    break;
                case ".def":
                    ProcessDEF(myContents);
                    break;
                case ".ghi":
                    ProcessGHIL(myContents);
                    break;
               //etc...
            }

我嘗試使用通用方法創建接口:

public ProccessStuff(data);

但我認為這行不通,因為我沒有通用的返回類型。

然后我想到了一個抽象類,但似乎我將在該抽象類中投入大量工作。

public abstract class MyAbstractClass 
{
    public void ProcessStuff(string data)
    {
        // Parse the data into an object

        // Update some DB fields

        // Log some data
    }
}

我只是創建一個抽象類來處理我的所有邏輯,這是否走在正確的道路上?

你是說這些課程沒有任何相似之處。 但這實際上不是真的——它們都使用一個string來做一些處理,而這正是您想要在類之間共享的。

制作一個接口, IDataProcessor (或其他東西)。 在那里,有一個方法 - void Process(string) 文件類將以它們需要的方式實現該方法。

這會將您的主類switch到一個簡單的

IDataProcessor actualDataProcessor = ...;

actualDataProcessor.Process(myContents);

當然,您仍然需要某種方式來基於擴展名創建適當的IDataProcessor 根據您的具體需求,一個簡單的Dictionary<string, Func<IDataProcessor>>可能就足夠了。 否則,如果您願意,還有很多其他方法可以更動態地綁定類,或者使用顯式工廠類。

您是否嘗試過使用泛型? 這是一個例子:

public void Process<T>(string contents)
    where T : IProcessStuff, new ()
{
    // Common work to do here
    // ...

    // Specific processing stuff
    T t = new T();
    t.ProcessStuf(contents);
}

public interface IProcessStuff
{
    void ProcessStuf(string contents);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM