2

我喜欢使用新的 api i ServiceStack,并且在我喜欢保持不变的遗留项目中有一些 Pocos。但是,在我的 ServiceStack 项目中将它们复制到 Dto 感觉有点不妥。我可以偷懒并以某种方式将属性“传递”给我的遗留 pocos 吗?

这适用于 JsonServiceClient,但为 json 添加了一个额外的级别,我不喜欢:

[Route("/legacytype", "POST,OPTIONS")]
public class RequestLegacyTypePost : IReturn<int>
{
    public LegacyTypeLegacyType{ get; set; }
}

public class LegacyTypeService : Service
{
    public object Post(RequestLegacyTypePost request)
    {
        return db.Insert(request.LegacyType);
    }
}

将属性复制粘贴到 DTO 方式自然可以正常工作:

[Route("/legacytype", "POST,OPTIONS")]
public class RequestLegacyTypePost : IReturn<int>
{
    public int Id { get; set; }
    public string SomeProp { get; set; }
    public string OtherProp { get; set; }
}

也许这就是最佳实践?

4

2 回答 2

2

ServiceStack 允许您重新使用任何现有的 Poco 作为请求 DTO,如果您不想修改现有的遗留 dll,那么您可以在 AppHost.Configure() 中使用 Fluent API 以非侵入方式添加路由:

Routes
    .Add<LegacyTypeLegacyType>("/legacytype", "POST,OPTIONS");
于 2013-03-20T14:33:01.080 回答
1

您还可以将模型继承到自定义 DTO 中,例如:

[Route("/legacytype", "POST,OPTIONS")]
RequestLegacyTypeDTO : LegacyType, IReturn<int> { }

这将使您可以访问原始LegacyType模型的所有属性而无需更改它。

于 2013-03-20T14:23:58.817 回答