《模式——工程化实现及扩展》(设计模式C# 版)《适配器模式 Adapter》——“自我检验"
MarvellousWorks公司最近开始向大客户提供后台接入服务,允许客户通过该服务与其多个在线业务进行B2B集成。
大体处理流程如下:
1) 客户通过消息队列将请求以报文的形式发给MarvellousWorks公司的“队列服务平台”。
2) 为了安全考虑,“消息平台”的处理逻辑主动从“队列服务平台”抓取最新提交的报文。
3) 抓取新报文后,“消息平台”对报文进行拆解,读取其中的信息并验证其有效性。
4) “消息平台”将拆解并验证有效地报文信息写入数据库
限制:
1) 报文数据均为XML格式,其 XML Schema预先由MarvellousWorks定义并发布,各家客户遵照执行
2) 由于客户使用的队列产品各异,所以“队列服务平台”计划支持微软MSMQ和IBM MQ,后续还可能支持ORACLE的Advanced Queue和BEA的MessageQ。
3) 由于MarvellousWorks的各个在线业务建立时间不同,所以数据库既有ORACLE、也有MySQL和SQL Server。
现在由你作为架构师设计“消息平台”的服务程序。
1、 队列访问接口和数据库访问接口的定义如下:
/// 队列访问接口
/// </summary>
interface IQueue
{
XmlDocument Peek();
XmlDocument Dequeue();
}
/// <summary>
/// 各在线业务数据实体的基类
/// </summary>
abstract class EntryBase { }
/// <summary>
/// 这里为了简化示例,将所有业务实体写如数据库前转换为ADO.NET自带的DataRow类型
/// </summary>
interface IEntryDataConverter
{
DataRow ToDataRow(EntryBase entry);
}
/// <summary>
/// 数据库访问接口
/// </summary>
interface IDatabase
{
IEntryDataConverter DataConverter { get; set; }
void Write(EntryBase entry);
void Write(IEnumerable<EntryBase> entries);
}
2、 请用本章介绍的适配器模式设计“消息平台”处理接口,并用建立一个简单的原型,通过单元测试验证你的思路。
3、 由于报文数据种类众多,请用本章介绍的数据适配机制配合上面的消息处理接口完成一个数据适配原型,并通过单元测试验证。
提示:
为保持“消息平台”处理逻辑的稳定,建议考虑Adapter-Adapter级联的方式,完成报文抓取到消息入库的过程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述