C# 设计模式决策-RESTAPI&;达尔
我正在开发具有WCF REST API和一些DAL以下的应用程序。一切都是用C写的 所有REST方法都是GET,但其中许多方法都有我解析并映射到列表对象的通用字符串参数(以及其他参数)。它工作得很好 当涉及到映射到Dto对象时,我想使用一些设计模式来基于映射的REST参数实例化正确的Dto。不确定是否可能,因为我有那个通用字符串参数(参数名称将不会一直相同) 另外,根据创建的Dto类型,我想选择合适的DB方法来调用,我猜,这是命令设计模式吗 谢谢你的帮助,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方法来调用,我猜,这是命令设计模式吗 谢谢你的帮助, 如果需要,我可以解释更多。问题的关键是
如果需要,我可以解释更多。问题的关键是: …基于映射的REST参数实例化正确Dto的设计模式 对我来说,这听起来像是你想使用的 呃。是的,我知道,cargo cult编程等等,但是(!),有很好的理由:
- 您希望基于某些设置初始化类(DAL)
- 您希望在顶层(REST映射)定义这些设置
- 您希望较低级别的代码完全不知道设置(对吗?),这样它们就可以任意更改,而无需进行系统范围的重构
考虑创建一个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表达式中。