在实例为ServiceStack我没有看到一个单一的应用程序,ASP.NET MVC的网站,然后再做出ServiceStack服务第二。
让我们呈现产品通过浏览一个非常简单的ASP.NET MVC的Web应用程序。 它使用控制器,视图,模型和的ViewModels。
比方说,我们有一个模型Product
,其被持续到文档DB。 假设我们有一个视图模型ProductViewModel
它会从映射的Product
和显示MVC Razor视图/ PartialView内。
所以这是things..now假设我们要添加一个服务退回产品的各种客户喜欢Windows 8的应用程序的网络侧。
如果请求/响应等级从我们已经彻底断开? 我们ProductViewModel
可能已经包含我们想从服务返回的一切。
既然我们已经有了Product
(模型类),我们不能再有一个Product
的API类namespace..well我们可以但使事情不清楚,我想避免这种情况。
因此,我们应引入独立ProductRequest
类和ProductRequestResponse
(继承ProductViewModel)在API命名空间中的类?
像这样ProductRequestResponse : ProductViewModel
?
我想说的是,我们已经拥有了模型和视图模型类和构建Request和Response类的SS服务,我们将不得不创建另一个两个文件,主要是通过复制一切从我们已有的类。 这看起来并不干了,它可能遵循的准则担忧的分离,但DRY也很重要,其实比分离的一切(分离一切导致重复的代码)以上。
我想看到的是,其中一个Web应用程序已经作出,但目前功能模型和的ViewModels,并返回相应的视图显示在Web上,但可以扩展成一个功能齐全的服务,以支持客户程序的情况下? 像AJAX客户端等......与我们所拥有。
另一件事:
如果你看看这个例子https://github.com/ServiceStack/ServiceStack.Examples/blob/master/src/ServiceStack.MovieRest/MovieService.cs
你会看到有Movie
Request类和Movies
Request类(一个单电影的要求,另外一个电影的列表)。 因此,也有两个服务, MovieService
和MoviesService
,一个交易与一个单一的电影,另一部分用于电影的流派的请求。
现在,虽然我喜欢SS服务方式,我认为这是正确的,我不喜欢这种仅仅因为请求的类型的分离。 如果我想导演的电影吗? 我会被发明了另一个请求类有Director
财产和另一个服务( MoviesByDirector
它)?
我认为,样品应朝一个服务取向。 有应对一切的电影必须是在一个屋檐下。 怎样才能实现与ServiceStack?
public class ProductsService : Service
{
private readonly IDocumentSession _session;
private readonly ProductsHelperService _productsHelperService;
private readonly ProductCategorizationHelperService _productCategorization;
public class ProductRequest : IReturn<ProductRequestResponse>
{
public int Id { get; set; }
}
// Does this make sense?
// Please note, we use ProductViewModel in our Views and it holds everything we'd want in service response also
public class ProductRequestResponse : ProductViewModel
{
}
public ProductRequestResponse GetProducts(ProductRequest request)
{
ProductRequestResponse response = null;
if (request.Id >= 0)
{
var product = _session.Load<Product>(request.Id);
response.InjectFrom(product);
}
return response;
}
}