首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动生成服务、DAO和DAO

自动生成服务、DAO和DAO
EN

Stack Overflow用户
提问于 2015-06-06 07:56:57
回答 1查看 558关注 0票数 0

我正在使用ServiceStack将我的厚客户端连接到我们的API服务器,我非常喜欢它。但是,我发现必须为每个请求(Foo、FooResponse和FooService)编写三个类才会有点麻烦。

在我的项目中,我有很多DAO接口,它们如下所示:

代码语言:javascript
复制
public interface ICustomerDao {
    public IList<Customer> FindCustomers(long regionId, string keyword);
}

我希望能说出这样的话:

代码语言:javascript
复制
public interface ICustomerDao {

    [AutoApi("Loads customers for the given region whose names match the keyword")]
    [AutoRoute("/search/customer/{regionId}/{keyword}"]
    public IList<Customer> FindCustomers(long regionId, string keyword);
}

public class SomeBusinessLogic {

    [AutoService(typeof(ICustomerDao))]
    public IList<Customer> FindCustomers(long regionId, string keyword) {
        // lots of business logic here
    }
}

然后,我希望为我自动生成以下类:

  • FindCustomers:ServiceStack DTO请求
  • FindCustomersResponse:回应
  • FindCustomersService:接受FindCustomers DTO的服务,然后调用SomeBusinessLogic.FindCustomers(req.RegionId, req.Keyword)并将其返回值封装在FindCustomersResponse
  • ApiServiceCustomerDao:通过自动生成方法实现ICustomerDao,这些方法构造FooRequest并与适当的服务联系,然后接收FooResponse并自动解压它。

像这样的东西已经存在了吗?如果没有,执行起来会有多难?有更好的办法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-06-06 13:47:37

AutoQuery

首先,我建议您看看AutoQuery是否适合快速创建数据驱动服务。

动态生成和注册服务

由于ServiceStack促进了一个代码优先开发模型,并且您的请求和响应DTO代表了您的服务契约,我强烈建议您不要尝试动态生成它们,因为您应该保留对其定义的完全控制,但是您可以使用它们作为模板,通过遵循相同的方法AutoQuery用于生成服务实现并动态注册它们来动态生成您自己的服务实现。

在AutoQuery中,只需定义请求DTO,服务实现的其余部分就会动态生成和注册。由于它返回标准的QueryResponse<T>响应类型,所以没有动态生成DTO的DTO类型,并且由于代码第一请求DTO、客户端仍然保留端到端类型的API。,例如:

代码语言:javascript
复制
var movies = client.Get(new FindMovies { Ratings = new[]{"G","PG-13"} });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30680397

复制
相关文章

相似问题

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