类有很多方法

时间:2019-06-06 04:31:51

标签: c# design-patterns

我有一堂课,里面有很多功能:

MyClass.cs方法:

  • 登录

  • 上传文件

  • 上传文件夹

  • 上传大文件

  • 下载

还有更多

问题在于类的成长和壮大,并且开始在同一个类中编写整个方法变得不舒服。

一方面,我想调用以下功能:

var myclass=new MyClass();
myclass.SomeMethod();

但是价格是将所有类放在同一文件中。

我为此有任何设计模式吗?或任何其他想法将不胜感激

2 个答案:

答案 0 :(得分:1)

只需将MyClass方法中的代码提取到其他类即可。在MyClass中,您只需调用/委托其他类即可。

这样,您可以减少MyClass中的代码量,而无需减少其方法列表。

答案 1 :(得分:1)

如何使用依赖倒置?

然后您可以定义您的主类,例如

public class MyClass
{
    public IUserManagement UserManager { get; set; }
    public IFileManagement FileManager { get; set; }
    public IFolderManagement FolderManager { get; set; }

    public MyClass()
    {

    }
}

具有这些界面

public interface IUserManagement
{
    void Login(string username, string password);
    void Logout();
}

public interface IFileManagement
{
    void UploadFile(string path);
    void UploadLargeFile(string path);
    void DownloadFile(string filename, string savePath);
}

public interface IFolderManagement
{
    void DownloadFolder(string path);
    void UploadFolder(string path);
}

然后,您的大量代码将进入执行诸如此类特定任务的类。

public class MyFileManager : IFileManagement
{
    public void DownloadFile(string filename, string savePath)
    {
        //Add code here
    }

    public void UploadFile(string path)
    {
        //Add code here
    }

    public void UploadLargeFile(string path)
    {
        //Add code here
    }
}

public class MyUserManager : IUserManagement
{
    public void Login(string username, string password)
    {
        //Add code here
    }

    public void Logout()
    {
        //Add code here
    }
}

public class MyFoldermanager : IFolderManagement
{
    public void DownloadFolder(string path)
    {
        //Add code here
    }

    public void UploadFolder(string path)
    {
        //Add code here
    }
}

然后您可以创建您的类并调用类似的方法

MyClass myClass = new MyClass()
{
    FileManager = new MyFileManager(),
    FolderManager = new MyFoldermanager(),
    UserManager = new MyUserManager()
};

myClass.FileManager.DownloadFile("myfilename", @"c:\path\to\file.txt");

如果需要,还可以在MyClass中添加包装器,以隐藏诸如此类的一些复杂性。

//Add in MyClass
public void UploadFile(string path)
{
    this.FileManager.UploadFile(path);
}

//Called like this
myClass.UploadFile(@"c:\path\to\other\file.txt");

这样,您可以将每个功能区域的职责委派给易于管理的特定类。