自动生成服务,其DTO和DAO

时间:2015-06-06 07:56:57

标签: c# automation servicestack

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

在我的项目中,我有很多DAO接口,看起来像这样:

public interface ICustomerDao {
    public IList<Customer> FindCustomers(long regionId, string keyword);
}

我希望能够说出这样的话:

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:通过自动生成构建FooRequest的方法实现ICustomerDao并联系相应的服务,然后接收FooResponse并自动解压缩。

这样的事情已经存在吗?如果没有,实施起来有多难?还有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

sample applications

我首先建议查看AutoQuery,了解它是否适​​合快速创建数据驱动的服务。

动态生成并注册服务

由于ServiceStack推广代码优先开发模型,而您的请求和响应DTO代表您的服务合同,我强烈建议不要尝试动态生成它们,因为您应该保留对其定义的完全控制,但您可以将它们用作模板通过遵循相同的方法AutoQuery动态生成您自己的服务实现。

在AutoQuery中,您只需要定义Request DTO,其余的Service实现都是动态生成和注册的。由于它返回标准QueryResponse<T>响应类型,因此动态生成DTO,并且由于代码优先的请求DTO,客户端AutoQuery uses to generate your Services implementations and register them dynamically,例如:

var movies = client.Get(new FindMovies { Ratings = new[]{"G","PG-13"} });