Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设计模式决策-RESTAPI&;达尔_C#_Api_Design Patterns_Factory Pattern_Command Pattern - Fatal编程技术网

C# 设计模式决策-RESTAPI&;达尔

C# 设计模式决策-RESTAPI&;达尔,c#,api,design-patterns,factory-pattern,command-pattern,C#,Api,Design Patterns,Factory Pattern,Command Pattern,我正在开发具有WCF REST API和一些DAL以下的应用程序。一切都是用C写的 所有REST方法都是GET,但其中许多方法都有我解析并映射到列表对象的通用字符串参数(以及其他参数)。它工作得很好 当涉及到映射到Dto对象时,我想使用一些设计模式来基于映射的REST参数实例化正确的Dto。不确定是否可能,因为我有那个通用字符串参数(参数名称将不会一直相同) 另外,根据创建的Dto类型,我想选择合适的DB方法来调用,我猜,这是命令设计模式吗 谢谢你的帮助, 如果需要,我可以解释更多。问题的关键是

我正在开发具有WCF REST API和一些DAL以下的应用程序。一切都是用C写的

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

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

另外,根据创建的Dto类型,我想选择合适的DB方法来调用,我猜,这是命令设计模式吗

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

问题的关键是:

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

对我来说,这听起来像是你想使用的

呃。是的,我知道,cargo cult编程等等,但是(!),有很好的理由:

  • 您希望基于某些设置初始化类(DAL)
  • 您希望在顶层(REST映射)定义这些设置
  • 您希望较低级别的代码完全不知道设置(对吗?),这样它们就可以任意更改,而无需进行系统范围的重构
当然,您总是可以在堆栈中传递DAL的一个实例,但这并不总是可能的,而且可能会变得有点混乱

或者。。。
考虑创建一个DAL实现,该实现可以了解各种开关,并将调用正确的DAL实现。这实际上可能比一个简单的工厂更轻。

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

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

  • 业务层
  • 数据访问层
  • 数据服务(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;
        }
    }
业务层:

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"));
    }
}
}
命名空间数据访问层
{
公共类snapshotdal:PrototypeDB
{
公共快照GetSanpshot(字符串符号)
{
AddParameter(“o_快照”);
AddParameter(“i_符号”,符号);
快照objSanapshot=新快照();
返回ObjectHelper.FillObject(typeof(Snapshot),GetReader(“A_SM7_V1_P.GetSnapshotQuick”);
}
}
}

DAL是服务层当前引用的类库
generic string参数
是筛选器和排序条件吗?另外,
所有REST方法都是GET
它们都是安全的方法,不会改变REST应用程序的资源状态吗?@nikita yes和yes。我不使用ORM,所以过滤器是我处理的字符串参数manually@user1073210那么为什么不使用OData?@user1073210如果不想使用ORM,那么可以使用WCF数据服务附带的ReflectionProvider。如果您不想使用Odata,可以从中获取查询语法,并使用Linq2Rest库,该库使您能够将Odata查询传输到LINQ表达式中。