设计模式决策 - REST API& DAL

时间:2014-09-23 09:11:18

标签: c# api design-patterns factory-pattern command-pattern

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

所有REST方法都是GET,但是其中许多方法都有通用字符串参数(以及其他参数),我将其解析并映射到列表对象。效果很好。

当谈到映射到Dto对象时,我想使用一些设计模式来基于映射的REST参数实例化正确的Dto。不确定是否可能因为我有那个通用字符串参数(param名称不会一直相同)?

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

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

2 个答案:

答案 0 :(得分:0)

问题的关键是:

  

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

对我而言,这听起来像是要使用Factory Pattern

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

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

当然,你总是可以将DAL的一个实例传递到堆栈中,但这并不总是可行的,并且可能会有点混乱。

另外...

考虑创建一个可以使各种开关知道的DAL实现,并delegate调用正确的DAL实现。这可能实际上比直接工厂重量轻。

答案 1 :(得分:0)

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

我创建了.net解决方案并添加到项目

下面
  • BusinessLayer
  • DataAcessLayer
  • DataService(WCF服务)
  • EntityLayer

的DataService:

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