.net6+Volo.Abp实现简单业务策略模式
业务简介:根据请求参数PlatforyType类型实现调用不同的平台业务逻辑
该模式优点:符合开闭和单一原则,后端开发人员只需专注于每个平台的业务开发,如果一个平台业务改变,只需针对该平台进行调整;如果有新增平台业务,只需新增该平台业务实现,不需要调整整体代码
(注意:使用abp的批量注入模式时,接口名称跟实现接口的类名称要一致,例如,接口名称:IGetOrderInfo,实现类名称:EbayGetOrderInfo,必须包好接口名称,要不然无法注入容器)
简单实现流程:
1,定义一个业务接口,接口包含PlatforyType类型和GetInfo方法
2,实现接口
3,定义一个工厂接口,接口包含GetInfo方法
4,实现工厂接口,Getinfo方法根据传入的PlatforyType类型调用不同平台业务
实现代码:
1,定义业务接口:
using Volo.Abp.DependencyInjection;
namespace WebApplication7.IServices
{
public interface IGetOrderInfo:ITransientDependency
{
int PlatforyType { get; }
string GetInfo();
}
}
2,实现接口:
using WebApplication7.IServices;
namespace WebApplication7.Services
{
public class EbayGetOrderInfo : IGetOrderInfo
{
public int PlatforyType { get => 0; }
public string GetInfo()
{
var name = "ebay";
return name;
}
}
}
using WebApplication7.IServices;
namespace WebApplication7.Services
{
public class AmazonGetOrderInfo : IGetOrderInfo
{
public int PlatforyType { get => 1; }
public string GetInfo()
{
var name = "amazon";
return name;
}
}
}
3,定义一个工厂接口,接口包含GetInfo方法
using Volo.Abp.DependencyInjection;
namespace WebApplication7.Factory
{
public interface IFactory:ITransientDependency
{
string GetInfo(int platformType);
}
}
4,实现工厂接口,Getinfo方法根据传入的PlatforyType类型调用不同平台业务
using Volo.Abp.Modularity;
using WebApplication7.IServices;
namespace WebApplication7.Factory
{
public class GetOrderInfoFactory : IFactory
{
IEnumerable<IGetOrderInfo> _list;
public GetOrderInfoFactory(IEnumerable<IGetOrderInfo> list)
{
_list = list;
}
public string GetInfo(int platformType)
{
var client = _list.FirstOrDefault(w => w.PlatforyType == platformType);
if(client == null)
{
return String.Empty;
}
return client.GetInfo();
}
}
}
5,实现批量注入
using Volo.Abp.Modularity;
namespace WebApplication7.Model
{
public class ServiceModel:AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
}
}
}
6,program添加配置
builder.Services.AddApplication<ServiceModel>();
7,实现请求接口
using Microsoft.AspNetCore.Mvc;
using WebApplication7.Factory;
namespace WebApplication7.Controllers
{
[ApiController]
public class TestController : ControllerBase
{
ElasticClientFactory _elasticClient;
ILogger _log;
IFactory _factory;
public TestController(ElasticClientFactory elasticClient, IFactory factory)
{
_elasticClient = elasticClient;
_factory = factory;
}
[HttpGet]
[Route("[controller]/TestGetOrderInfo")]
public ActionResult TestGetOrderInfo( int platformType = 0)
{
var info = _factory.GetInfo(platformType);
return Ok(info);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构