繁体   English   中英

设计模式决策-REST API和DAL

[英]Design Pattern decisions - REST API & DAL

我正在使用具有WCF REST API且低于DAL的应用程序。 一切都用C#编写。

所有REST方法都是GET方法,但是其中许多方法都具有我分析并映射到列表对象的通用字符串参数(以及其他参数)。 它运作良好。

当涉及到Dto对象的映射时,我想使用一些设计模式基于映射的REST参数实例化正确的Dto。 由于我具有该通用字符串参数(参数名称始终不会相同),因此不确定是否可以?

另外,基于创建的Dto类型,我想选择适当的DB方法来调用,我猜这是一种命令设计模式吗?

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

问题的关键是:

...设计模式基于映射的REST参数实例化正确的Dto

对我来说,这听起来像您要使用“ 工厂模式”

是的,我知道,货物崇拜编程等,但(!),有充分的理由:

  • 您想基于一些设置来初始化一个类(DAL)
  • 您希望在顶层定义这些设置(REST映射)
  • 您希望较低级别的代码完全不了解设置(对吗?),以便它们可以随意更改而无需系统范围的重构。

当然,您总是可以仅将DAL的一个实例传递到堆栈中,但这并非总是可能的,并且可能会变得有些草率。

或者...

考虑创建一个DAL实现,该实现可以了解各种开关,并将调用委派给正确的DAL实现。 实际上,这可能比直接工厂减轻的重量。

我已经开发了相同类型的应用程序(WCF REST服务)。

我已经创建了.net解决方案,并在项目下面添加了

  • 业务层
  • 数据访问层
  • DataService(WCF服务)
  • 实体层

数据服务:

 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;
        }
    }

BusinessLayer:

namespace BusinessLayer
{
public class SnapshotBAL
{
    public Snapshot GetSanpshot(string symbol)
    {
        return (new SnaapshotDAL()).GetSanpshot(symbol);
    }       
}
}

EntiryLayer:

namespace EntityLayer
{
public class Snapshot
{

    public DateTime time { get; set; }
    public double price { get; set; }
 }
}

DataAccessLayer:

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"));
    }
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM