[英]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.