有没有减少方法计数的模式?
本文关键字:模式 方法 有没有 | 更新日期: 2023-09-27 18:15:48
有一个类,它有两个方法。(原文可在此找到)
public string SearchAnime(string searchTerm)
{
// returns string
}
public AnimeSearchResponse SearchAnimeDeserialized(string searchTerm)
{
// returns an AnimeSearchResponse type object instance
}
我正在尝试创建上述两个方法的异步版本。这就意味着需要创建像SearchAnimeAsync
和SearchAnimeDeserializedAsync
这样的方法。
计划添加更多返回XML或JSON数据的SearchAnime*
方法。当我添加更多的SearchAnime*
方法时,由于异步对应,方法的数量将增加两倍。(SearchAnimeXml和;SearchAnimeXmlAsync和SearchAnimeJson &SearchAnimeJsonAsync)
它变得更糟,因为类还包含SearchManga
和SearchMangaDeserialized
,我将为它们创建异步版本。
是否有解决方案或设计模式可以缓解方法的爆炸?
我想到的一个解决方案是创建一个Searcher
抽象基类(具有Search
和SearchAsync
方法)和一个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
的具体类型,例如使用工厂方法设计模式。