在ServiceStack 的示例中,我没有首先看到ASP.NET MVC网站的单个应用程序,然后将ServiceStack服务放在第二位.
我们来看一个非常简单的ASP.NET MVC Web应用程序,它通过Views呈现产品.它使用控制器,视图,模型和视图模型.
假设我们有一个模型Product被持久存储到文档DB中.假设我们有一个viewmodel,ProductViewModel它从ProductMVC Razor View/PartialView中映射并显示.
所以这是一个网络方面的东西..现在让我们假设我们想要添加一个服务返回产品到各种客户端,如Windows 8应用程序.
请求/响应类是否应该与我们已有的完全断开?我们ProductViewModel可能已经包含了我们想要从服务中返回的所有内容.
既然我们已经有了Product(模型类),我们就不能Product在API命名空间中拥有另一个类.我们可以但是这会使事情变得不清楚,我想避免这种情况.
那么,我们应该在API命名空间中引入独立ProductRequest类和ProductRequestResponse(继承ProductViewModel)类吗?
像这样ProductRequestResponse : ProductViewModel?
我所说的是,我们已经拥有Model和ViewModel类,并为SS服务构建Request和Response类,我们必须创建另外两个文件,主要是通过复制我们已有的类中的所有内容.这对我来说看起来并不干净,它可能会遵循关注点分离指南,但DRY也很重要,实际上不仅仅是分离所有内容(将所有内容分开导致代码重复).
我希望看到的是一个已经建立了Web应用程序的情况,它目前具有Models和ViewModel,并返回适当的视图以便在Web上显示,但是可以扩展为支持程序化客户端的全功能服务?就像AJAX客户端......以及我们已经拥有的东西.
另一件事:
你会看到有MovieRequest类和MoviesRequest类(一个用于单个电影请求,另一个用于电影列表).因此,也有两个服务,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> …Run Code Online (Sandbox Code Playgroud) 我正在我的应用程序上进行一些功能测试,我想我已经非常接近了.我的问题是,当我运行第一次测试时,我得到了错误.
无法连接到远程服务器.
预期:好的
但是:0
我可以确认,如果我在断言上设置断点,然后尝试BaseUrl在我的浏览器中点击,则找不到它.
这是我的考试.
[Test]
public void MyTestTest ()
{
var client = new RestClient( ServiceTestAppHostBase.BaseUrl );
// client.Authenticator = new HttpBasicAuthenticator( NUnitTestLoginName, NUnitTestLoginPassword );
var request = new RestRequest( "/users/", Method.GET );
request.RequestFormat = DataFormat.Json;
var response = client.Execute( request );
// do assertions on the response object now
Assert.That( response.StatusCode, Is.EqualTo( HttpStatusCode.OK ) );
}
Run Code Online (Sandbox Code Playgroud)
在AppServerTestSetup这个样子的
[SetUpFixture]
public class AppServerTestSetup
{
ServiceTestAppHostBase _appHost;
[SetUp]
public void SetUp()
{
_appHost = new ServiceTestAppHostBase(); …Run Code Online (Sandbox Code Playgroud)