服务堆栈应用程序结构
本文关键字:结构 应用程序 堆栈 服务 | 更新日期: 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 包含域模型是很常见的。