簡體   English   中英

具有多個公共方法的私有嵌套類

[英]Private nested class with multiple public methods

我上課管理3種不同的上傳操作:

internal class UploadManager
{
   internal UploadManager(UploadOperation uploadOperation)
   {
       switch (uploadOperation.OperationType)
       {
           //run different set of async tasks based on OperationType, 
           //using nested class Uploader
       }
   }


   private class Uploader
   {
        //do all upload work
   }
}

Wcf操作合同中使用的3個操作之間的區別以及要發送的數據類型。 這種情況下最好的架構是什么? 設置3個不同的Uploader類? 還是1類3種方法? 還是一種方法有3個重載的1類?

總的來說,我應該使用嵌套類嗎? 謝謝。

在評論后添加:問:操作類型會隨時間變化嗎? 答:不可以

問:您會添加更多嗎? 答:是(還有1-5個)

問:它們是否會需要更多參數,並且不會在所有類型之間共享? 答:不可以

您應該避免實例化您的UploadManager中的類,而應提供一個UploaderFactory類,該類選擇要使用的特定上載器。 為了實現這一點,Uploader和uploaderFactory需要實現接口(IUploader和IUploaderFactory)。 工廠有一個方法-GetUploader(...),它返回正確類型的Uploader的實例。

無需私人班級-使其內部化。 最重要的是隔離功能使所有內容都可測試。

所以像這樣:

interface IUploader
{
    void DoStuff();
}

interface IUploaderFactory
{
    IUploader GetUploader(UploadOperation uploadOperation);
}

internal class UploadManager
{
    internal UploadManager(IUploaderFactory uploaderFactory, UploadOperation uploadOperation)
    {
        var uploader = uploaderFactory.GetUploader(uploadOperation);

        //run different set of async tasks based on OperationType, 
        //using nested class Uploader
        uploader.DoStuff();
    }
}

internal class Uploader1 : IUploader
{
    public void DoStuff()
    {
        ...
    }
}

internal class Uploader2 : IUploader
{
    public void DoStuff()
    {
        ...
    }
}

internal class Uploader3 : IUploader
{
    public void DoStuff()
    {
        ...
    }
}

這種方法的主要優點是:

  • 您可以分別測試每個實例。 為了即時起見-您可以測試工廠是否返回正確的上載器,並在一個完整的測試集中測試特定的上載器。
  • 您可以輕松地添加新的上載器,而無需更改代碼(只需修改新的上載器和工廠。哦,還有UploadOperation結構)。

這是一個模糊的答案,但我認為它是一種架構方法。

希望對您有所幫助-祝您好運!

使用KISS原理,我將通過3種方法參加1節課。

暫無
暫無

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

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