首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计模式决策- REST和DAL

设计模式决策- REST和DAL
EN

Stack Overflow用户
提问于 2014-09-23 09:11:17
回答 2查看 1.4K关注 0票数 0

我正在开发具有WCF REST及以下DAL的应用程序。所有东西都是用C#编写的。

所有REST方法都是GET,但其中许多方法都具有泛型字符串参数(以及其他参数),我解析这些参数并映射到list对象。效果很好。

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2014-09-23 09:19:06

问题的重点是:

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

对我来说,这听起来像是你想要使用工厂模式

呃。是的,我知道,货物邪教编程等等,但是(!)有很好的理由:

  • 您希望根据某些设置将类( DAL)降级。
  • 您希望在顶层(REST映射)定义这些设置。
  • 您希望低级代码完全不了解设置(对吗?)这样它们就可以任意改变,而不需要全系统范围的重构。

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

或者..。

考虑创建一个DAL实现,可以让它知道各种交换机,并将代表调用正确的DAL实现。这可能会比一家直接的工厂轻一些。

票数 0
EN

Stack Overflow用户

发布于 2014-09-23 09:27:36

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

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

  • BusinessLayer
  • DataAcessLayer
  • DataService (周转基金服务)
  • EntityLayer

DataService:

代码语言:javascript
复制
 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:

代码语言:javascript
复制
namespace BusinessLayer
{
public class SnapshotBAL
{
    public Snapshot GetSanpshot(string symbol)
    {
        return (new SnaapshotDAL()).GetSanpshot(symbol);
    }       
}
}

EntiryLayer:

代码语言:javascript
复制
namespace EntityLayer
{
public class Snapshot
{

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

DataAccessLayer:

代码语言:javascript
复制
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"));
    }
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25991185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档