我目前正在使用 Kotlin 和 Gradle 开发 Spring Boot 3 应用程序,我遇到了一个挑战,我想你们中的许多人可能会觉得有趣。我的应用程序处理涉及大量条件操作的复杂业务逻辑。挑战在于以一种既高效又可维护的方式实现这个逻辑。
这是我想要实现的目标的简化版本:
以下是一些具体问题:
我使用“when”构造,这使得编写条件更容易,但当您需要检查大量嵌套条件时也变得很麻烦。
如果没有代码,很难说应该使用什么模式。不过,这些话提醒我可以使用策略模式:
每组条件都可能导致不同的结果或行动
您将条件放入某种方法中,然后当决定应使用什么策略时,您可以应用它。
抱歉我不懂 Kotlin,所以让我通过 C# 展示一个示例。
这个方法和你一样有复杂的逻辑
public DataProviderType GetDataProviderType()
{
if (...)
return DataProviderType.Csv;
return DataProviderType.Api
}
这些是与策略相对应的枚举:
public enum DataProviderType
{
RabbitMq, Api, Csv
}
这是一个策略工厂:
public class DataProviderFactory
{
private Dictionary<DataProviderType, IDataProvider> _dataProviderByType
= new Dictionary<DataProviderType, IDataProvider>()
{
{ DataProviderType.RabbitMq, new RabbitMQDataProvider() },
{ DataProviderType.Api, new ApiDataProvider() },
{ DataProviderType.Csv, new CsvDataProvider() },
};
public IDataProvider GetInstanceByType(DataProviderType dataProviderType) =>
_dataProviderByType[dataProviderType];
}
然后你就可以得到这样的策略:
DataProviderType dataProviderType = GetDataProviderType();
DataProviderFactory dataProviderFactory = new();
IDataProvider dataProvider = dataProviderFactory
.GetInstanceByType(DataProviderType.Api);
string data = dataProvider.Get();