класс с множеством методов - PullRequest
1 голос
/ 06 июня 2019

У меня есть класс с большим количеством функций:

MyClass.cs Методы:

  • Логин

  • Загрузить файл

  • Загрузить папку

  • Загрузить большой файл

  • Скачать

и многие другие.

проблема в том, что класс растет и растет, и становится неудобно писать целые методы в одном классе.

В одной руке я хочу вызвать такие функции, как:

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

но цена состоит в том, чтобы поместить все классы в один файл.

У меня есть какой-нибудь шаблон дизайна для этого? или любые другие идеи будут оценены

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Как насчет использования инверсии зависимостей?

Затем вы можете определить свой основной класс, такой как этот

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");

Таким образом, вы можете делегировать ответственность за каждую функциональную область определенному классу, которым легче управлять.

1 голос
/ 06 июня 2019

Просто извлеките код внутри методов вашего MyClass в другие классы. В MyClass вы просто вызываете / делегируете другим классам.

Таким образом, вы можете уменьшить количество кода в MyClass, не уменьшая список методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...