设计模式决策-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方法来调用,我想这是命令设计模式吗?

感谢您的帮助,如果需要的话,我可以解释更多。

设计模式决策-REST API&;DAL

我已经开发了相同类型的应用程序(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实现。实际上,这可能比一个直接的工厂更轻。