有没有减少方法计数的模式?

本文关键字:模式 方法 有没有 | 更新日期: 2023-09-27 18:15:48

有一个类,它有两个方法。(原文可在此找到)

public string SearchAnime(string searchTerm)
{
    // returns string
}
public AnimeSearchResponse SearchAnimeDeserialized(string searchTerm)
{
    // returns an AnimeSearchResponse type object instance
}

我正在尝试创建上述两个方法的异步版本。这就意味着需要创建像SearchAnimeAsyncSearchAnimeDeserializedAsync这样的方法。

计划添加更多返回XML或JSON数据的SearchAnime*方法。当我添加更多的SearchAnime*方法时,由于异步对应,方法的数量将增加两倍。(SearchAnimeXml和;SearchAnimeXmlAsync和SearchAnimeJson &SearchAnimeJsonAsync)

它变得更糟,因为类还包含SearchMangaSearchMangaDeserialized,我将为它们创建异步版本。

是否有解决方案或设计模式可以缓解方法的爆炸?

有没有减少方法计数的模式?

我想到的一个解决方案是创建一个Searcher抽象基类(具有SearchSearchAsync方法)和一个ISearchResponse接口(指定所有响应的共同行为)。那么每个Searcher派生类将只有两个公开的方法。

public interface ISearchResponse
{
    void Foo();
}
public class AnimeSearchResponse : ISearchResponse
{
    public void Foo() {}
}
public abstract class Searcher
{
    abstract ISearchResponse Search();
    abstract ISearchResponse SearchAsync();
}
public class AnimeSearcher : Searcher
{
    public override ISearchResponse Search(string searchTerm)
    {
        return new AnimeSearchResponse(searchTerm);
    }
    public override ISearchResponse SearchAsync(string searchTerm)
    {
        return new AnimeSearchResponse(searchTerm);
    }
}

最终会得到很多类而不是很多方法,但优点是派生类型将更加专门化,如果需要,可以很容易地相互替换。在应用程序的某个地方,您可以选择您想要使用的Searcher的具体类型,例如使用工厂方法设计模式。