文档章节

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

丁川
 丁川
发布于 2016/10/02 11:59
字数 523
阅读 14
收藏 1

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

 

    

项目结构规范要求

 

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

 

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

 

需要建立三个项目:

 

>> Product.Web

 

>> Product.ServiceInterface

 

>> Product.ServiceModel

 

 

 

1 对外接口

 

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

 

 

wKioL1SPqNWjAKMVAACoSX9r600364.jpg

 

 

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

 

 

 

 

 2 内部服务和接口 

 

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

 

wKiom1SPqDeAcm-CAAC844r_sxs867.jpg 

 

定义的服务例如 

 

 

 

public class OrdersService : ServiceStack.ServiceInterface.Service

 

 

 

 

 

 

 

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

 

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

 

 

 

wKioL1SPqNaxarjmAAF1uz9Gy0A467.jpg 

 

 

入口类、路由定义在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 { get; set; }

 

 

 

 

 

public ResponseStatus ResponseStatus { get; set; }

 

}

 

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

 

 

 

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

 

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

 

    [Route("/orders")]

 

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

 

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

 

public class Orders

 

{

 

public int? Page { get; set; }

 

 

 

public string CustomerId { get; set; }

 

}

 

 

 

 

 

 

 

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

 

wKiom1SPq2SiUCXLAAOib6iI_xs144.jpg

 

 

 

 

 

 

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

 

 

 

wKioL1SPrASBofx1AAMqQW4JF28507.jpg

 

本文转载自:http://soaop.blog.51cto.com/6164600/1590408

共有 人打赏支持
丁川
粉丝 4
博文 52
码字总数 4829
作品 0
南宁
程序员
ServiceStack 简单使用

提到构建WebService服务,大家肯定第一个想到的是使用WCF,因为简单快捷嘛。首先要说明的是,本人对WCF不太了解,但是想快速建立一个WebService,于是看到了MSDN上的这一篇文章 Building Cro...

麦田守望者LEO
07/23
0
0
安装window下的redis,redis可视化管理工具(Redis Desktop Manager)安装,基础使用,实例化项目

以下包括内容: 一、redis下载安装,启动 二、Redis可视化管理工具(Redis Desktop Manager)安装 三、实例化项目 一、redis下载安装,启动 1,redis官方下载地址:https://redis.io/downlo...

saucxs
08/11
0
0
安装redis服务器 jedis分片存放数据到redis服务器

redis windows 下载地址:https://github.com/ServiceStack/redis-windows 一、下载的安装包解压到盘符的指定位置,如下结构:(纯手敲,如果有缺失,见谅) Redis.doc redis-benchmark.exe r...

薄暮凉年
2015/08/07
0
0
(译)在ASP.NET Web API中使用Redis

本文将介绍如何在ASP.NET Web API应用程序中使用Redis作为数据存储。利用ServiceStack.Redis库以及它强类型的Redis 客户端,实现如何建模和存储一对多的关系,以及使用Autofac的Web API依赖注...

jieqiuming
2014/05/01
0
0
Redis进阶实践之九 独立封装的RedisClient客户端工具类

Redis进阶实践之九 独立封装的RedisClient客户端工具类 一、引言 今天开始有关Redis学习的第九篇文章了,以后肯定会大量系统使用Redis作为缓存介质,为了更好的更好的Redis,自己写了两个工具...

morpheusWB
09/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java并发编程:volatile关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生...

engeue
15分钟前
0
0
通过ajax访问远程天气预报服务

http://www.webxml.com.cn/zh_cn/index.aspx 更改wsdl文件 打开文件将15行,51行,101行去掉 然后把文件复制到c盘 然后在桌面上面就生成了文件 将文件打成jar包 package cn.it.ws.weather;...

江戸川
今天
1
0
聊聊storm的tickTuple

序 本文主要研究一下storm的tickTuple 实例 TickWordCountBolt public class TickWordCountBolt extends BaseBasicBolt { private static final Logger LOGGER = LoggerFactory.getLogg......

go4it
今天
1
0
自动装箱和自动拆箱

自动装箱和自动拆箱 Java 提供了 8 种基本数据类型,每种数据类型都有其对应的包装类型,包装类是面向对象的类,是一种高级的数据类型,可以进行一些比较复杂的操作,它们是引用类型而不再基...

tsmyk0715
今天
2
0
简易审计系统

1、有时候我们需要对线上用户的操作进行记录,可以进行追踪,出现问题追究责任,但是linux自带的history并不会实时的记录(仅仅在内存中,当用户正常退出(exit logout )时才会记录到history文件里...

芬野de博客
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部