服务堆栈应用程序结构

本文关键字:结构 应用程序 堆栈 服务 | 更新日期: 2023-09-27 18:31:20

我最近开始研究ServiceStack以及如何在我们的架构中实现它。我们一直在使用 ASP.NET MVC 3/4与Service/Repository/UnitOfWork模式。

我正在寻找如何将ServiceStack集成到组合中的资源。

我们通常拥有的内容如下所示:

MVC Controller/Action --> Service --> Repository --> Entity Framework

我想重用我们拥有的域模型并通过 ServiceStack 公开它,那么我是否只让服务上的操作返回域模型?

例如

// Request DTO
public class Customer
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
}
// Response DTO
public class CustomerResponse
{
    public List<Customer> Customers { get; set; }
}
// Customer Service
public class CustomerService : IService
{
    public object Any(BrowseCustomers request)
    {
        var customers = new List<Customer>() {
            new Customer {
                FirstName = "Joe",
                LastName = "Bob",
                ...
            },
            new Customer {
                FirstName = "Jill",
                LastName = "Bob",
                ...
            }
        };
        return customers.Where(x => x.FirstName.ToLower().StartsWith(request.FirstName.ToLower()));
    }
}

编辑

我想我要问的是;我应该从ServiceStack Services返回响应DTO中的域对象吗?还是我根本不应该返回域对象,而是创建实体 DTO?

服务堆栈应用程序结构

有关服务堆栈应用程序体系结构的相当全面的文章,请参阅此处的Demis的答案。

长话短说,只要您的域对象是 POCO(普通旧 CLR 对象 - 意味着没有方法或继承),那么您应该没问题。

重要的一点是,请求/响应 DTO 对于要通过服务公开的操作是合乎逻辑的。不要将域模型用于请求 DTO,因为它很方便,而这样做是因为它是最佳选择。但是,让响应 DTO 包含域模型是很常见的。