[英]which is the best approach in designing my asp.net application architecture
[英]Not sure with my approach in .net application
我再次在這里尋求幫助。 我正在編寫我的第一個“真實的”應用程序來練習我學到的東西,但我不確定我的方法。 我會盡力解釋它,因為我的英語允許我這樣做。
應用程序由基礎抽象類和從該基礎繼承的三個類組成。
abstract class BaseClass
{
// Some stuff...
// This method is used in all classes. It gets whole adb output
// and returns it as a string for future formating
protected string ProcessAdbCommand(string command)
{
try
{
_processInfo.Arguments = command;
Process adbProcess = Process.Start(_processInfo);
adbProcess.WaitForExit();
return adbProcess.StandardOutput.ReadToEnd();
}
catch (Exception e)
{
WriteToLog(e.Message);
return null;
}
}
}
ProcessAdbCommand 返回輸出后,我將調用另一個方法來根據需要處理輸出。 原則始終是相同的 - 格式化輸出並根據輸出進行一些思考。
現在我想說清楚,負責輸出處理的方法需要在每個繼承的類中。 但問題是在非常類中它返回不同的值類型(布爾值、IDevice 列表和字符串)
我在這里掙扎。 首先,我想讓它受保護抽象。 有點像
abstract class BaseClass
{
// Some stuff...
// Same as above
protected string ProcessAdbCommand(string command)
{
//Same as above
}
//Method which will be implemented in every inherited class differently
protected bool|List<IDevice>|string ProcessAdbOutput(string adbOutput)
{
//Method implementation
return bool|List<IDevice>|string
}
}
但正如我發現的那樣,不可能覆蓋返回類型。 並且因為方法將始終僅在類內部使用,所以我認為沒有理由使用接口“強制”它。
一段時間后,我決定放棄在派生類中強制實現,並根據需要簡單地編寫它們。 但你認為這是“合法”的做法嗎? 您將如何解決“現實世界”應用程序中的此類問題? 有什么我仍然缺少的東西還是我的方法完全錯誤? 謝謝你。
掙扎的綠角。
一種可能的方法是使抽象基類通用並接受T
參數,該參數也可以是ProcessAdbOutput
方法的輸出。 然后,將方法abstract
以確保任何派生類型都必須實現它:
public abstract class BaseClass<T>
{
protected string ProcessAdbCommand(string command)
{
return string.Empty;
}
public abstract T ProcessAdbOutput(string result);
}
public class DerivedClass : BaseClass<IList<IDevice>>
{
public override IList<IDevice> ProcessAdbOutput(string result)
{
return new List<IDevice>();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.