具有多个公共方法的私有嵌套类

时间:2014-05-02 06:59:09

标签: c# wcf oop architecture

我上课时要管理 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种方法?或者1个类,一个方法有3个重载?

总的来说我应该使用嵌套类吗? 感谢。

评论后添加: 问:运营类型会在一段时间内发展吗? 答:没有

问:你会加入更多吗? 答:是(1-5更多)

问:他们(将)是否需要更多参数,并且不会在所有类型中共享这些参数? 答:没有

2 个答案:

答案 0 :(得分:2)

你应该避免在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()
    {
        ...
    }
}

这种方法的主要好处是:

  • 您可以分别测试每个实例。对于instanace - 您测试工厂它返回正确的上传器,并在一个完整的不同测试集中测试特定的上传器。
  • 您可以轻松添加新的上传器,只需对代码进行最小的更改(只需要修改新的上传器和工厂。哦,以及UploadOperation结构)。

这是一种模糊的答案,但我认为它解决了arcitecture方法。

希望它有所帮助 - 祝你好运!

答案 1 :(得分:1)

使用KISS原则,我会用3种方法进行1节课。