码迷,mamicode.com
首页 > 其他好文 > 详细

ServiceStack 项目实例 006 通过官方示例总结的项目结构方案

时间:2014-12-16 15:21:00      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:servicestack 官方案例 项目结构 扩展 对接

     研读了官方示例的ServiceStack.Examples 和 ServiceStack.Northwind,总结如下的项目方案结构,这种方式比较适合较大的项目,并且规范化很好,易于扩展和对接。


    

项目结构规范要求


根据ServiceStack官方示例项目,总结出如下项目规范:


项目目录结构,以产品管理模块示例:


需要建立三个项目:


>> Product.Web


>> Product.ServiceInterface


>> Product.ServiceModel


 

对外接口


Product.Web 中提供对外API接口,以及一般处理程序,也可以将测试页面和简单界面放在这个项目中。


bubuko.com,布布扣


 

全局环境配置Gloabl.asaxProduct.Web 项目中,这个项目提供的服务可以对接到其他的手机、软件及第三方网站。


 

 

 2 内部服务和接口 


 Product.ServiceInterface 中放置服务,同时也是内部调用的(dll模式)接口。


bubuko.com,布布扣 

 

定义的服务例如 


 

public class OrdersService : ServiceStack.ServiceInterface.Service


 

 

 

 类定义文件(包括POJO类和DTO类) 


Product.ServiceModel 入口类定义和出口类定义,及实体类的定义


 

bubuko.com,布布扣 

 

入口类、路由定义在Operations目录下的文件中,例如Operations/Order.cs文件中内容如下:


 

[Route("/customers")]


public class Customers


{


}


 

public class CustomersResponse : IHasResponseStatus


{


public CustomersResponse()


{


this.ResponseStatus = new ResponseStatus();


this.Customers = new List<Customer>();


}


 


public List<Customer> Customers { getset; }


 


public ResponseStatus ResponseStatus { getset; }


}


一般情况下将一个服务用到的入口类和出口类写在一个文件中,如果是复杂和聚合的数据,需要把类的调用关系通过定义属性,并且在构造函数中初始化该属性。


 

路由可以使用多重路由,对于类似的,有不同参数的操作


比如获取全部记录、按ID指定的一条、按关键字搜索的结果,以及分页方式获取的数据可以写成一组路由公用一个入口类。


    [Route("/orders")]


[Route("/orders/page/{Page}")]


[Route("/customers/{CustomerId}/orders")]


public class Orders


{


public int? Page { getset; }


 

public string CustomerId { getset; }


}


 

 

 

一个模块的组件功能和调用说明图:


bubuko.com,布布扣


 

 

 

多个模块及项目装配(以及通用库)


 

bubuko.com,布布扣

 

 

 

 

 

 

 


本文出自 “LifeStage” 博客,请务必保留此出处http://soaop.blog.51cto.com/6164600/1590408

ServiceStack 项目实例 006 通过官方示例总结的项目结构方案

标签:servicestack 官方案例 项目结构 扩展 对接

原文地址:http://soaop.blog.51cto.com/6164600/1590408

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!