设计模式决策-REST API&;DAL
本文关键字:amp DAL API 决策 -REST 设计模式 | 更新日期: 2023-09-27 18:23:57
我正在开发具有WCF REST API并低于某些DAL的应用程序。一切都是用C#编写的。
所有REST方法都是GET,但其中许多方法都有通用字符串参数(以及其他参数),我解析这些参数并将其映射到列表对象。它运行良好。
当涉及到映射到Dto对象时,我想使用一些设计模式来基于映射的REST参数实例化正确的Dto。不确定这是否可能,因为我有那个通用字符串参数(参数名称不会一直相同)?
此外,基于创建的Dto类型,我想选择合适的DB方法来调用,我想这是命令设计模式吗?
感谢您的帮助,如果需要的话,我可以解释更多。
我已经开发了相同类型的应用程序(WCF REST服务)。
我已经创建了.net解决方案,并在下面添加了项目
- BusinessLayer
- 数据访问层
- DataService(WCF服务)
- EntityLayer
数据服务:
public SnapshotData GetSnapshot(string symbol, int nocache)
{
SnapshotData objSnapshotData;
try
{
objSnapshotData = (new SnapshotBAL()).GetSanpshotData(symbol);
SerializeObject(objSnapshotData, localCacheKey);
return objSnapshotData;
}
catch (Exception ex)
{
return null;
}
}
业务层:
namespace BusinessLayer
{
public class SnapshotBAL
{
public Snapshot GetSanpshot(string symbol)
{
return (new SnaapshotDAL()).GetSanpshot(symbol);
}
}
}
实体层:
namespace EntityLayer
{
public class Snapshot
{
public DateTime time { get; set; }
public double price { get; set; }
}
}
数据访问层:
namespace DataAccessLayer
{
public class SnaapshotDAL : PrototypeDB
{
public Snapshot GetSanpshot(string symbol)
{
AddParameter("o_snapshot");
AddParameter("i_symbol", symbol);
Snapshot objSanapshot = new Snapshot();
return ObjectHelper.FillObject<Snapshot>(typeof(Snapshot), GetReader("A_SM7_V1_P.GetSnapshotQuick"));
}
}
}
问题中的关键一行是:
基于映射REST参数实例化正确Dto的设计模式
对我来说,这听起来像是你想使用工厂模式。
呃。是的,我知道,货物狂热编程等,但是(!),有充分的理由:
- 您想要基于一些设置初始化类(DAL)
- 您希望在顶层定义这些设置(REST映射)
- 您希望较低级别的代码完全不知道这些设置(对吧?),这样它们就可以随意更改,而不需要系统范围的重构
当然,您总是可以将DAL的一个实例向下传递到堆栈中,但这并不总是可能的,而且可能会变得有点混乱。
或者
考虑创建一个DAL实现,它可以了解各种交换机,并将调用委托给正确的DAL实现。实际上,这可能比一个直接的工厂更轻。