我最近开始关注ServiceStack
以及如何在我们的架构中实现它。我们一直在使用带有Service / Repository / UnitOfWork模式的ASP.NET MVC 3/4。
我正在寻找如何将ServiceStack集成到混合中的资源。
我们通常看起来像这样:
MVC Controller/Action
- > Service
- > Repository
- > Entity Framework
我想重新使用我们拥有的域模型并通过ServiceStack公开它,所以我只是让服务上的操作返回域模型吗?
E.G。
// 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服务返回Response DTO中的域对象吗?或者我应该根本不返回域对象,而是改为实体DTO?
答案 0 :(得分:3)
有关服务堆栈应用程序架构的相当全面的说明,请参阅Demis的回答here。
长话短说,只要您的域对象是POCO(普通的旧CLR对象 - 意味着没有方法或继承继续),那么你应该没问题。
重要的一点是,您的请求/响应DTO对于您希望通过服务公开的操作是合乎逻辑的。不要将域模型用于请求DTO,因为它很方便,因为它是最好的选择。但是,让您的Response DTO包含域模型是很常见的。