深入Sand之--Message分析

原创 2006年06月08日 17:33:00

                                                                             Sand Message分析
 
目标:分析Sand中Message的设计思路,使用OWL/RDF描述语言,设计一套通用的CRUD消息.
具体内容:
 一、Sand中Message的继承体系
SandMessage
 SandInstanceMessage
  NodeInstance(与当前的目标无关)
  SandStructMessage(关键)
   ...
 SandTransimitMessage
  SandVerbMessage
   AggregateUpdate(关键)
   SandCollectionMessage(关键)
    ...
   SandQueryMessage(关键)
    ...
   SandUpdateMessage(关键)
    ...

 从以上的类体系可以看得出,有四个关键的接口:SandStructMessage、SandCollectionMessage、SandQueryMessage和
SandUpdateMessage. 它们各自的职责如下;
 1. SandStructMessage: CRUD消息中业务内容的定义
 2. SandCollectionMessage: Query的结果集,包含了多个SandStructMessage.
 3. SandQueryMessage: query消息
 4. SandUpdateMessage: update消息, 只操作一个SandStructMessage
 5. AggregateUpdate: update消息, 可以操作多个SandStructMessage
 
 二、关键类/接口分析
 1. SandStructMessage
 SandStructMessage定义了CRUD的业务对象。它上面没有提供特殊的操作。
 
 2. SandQueryMessage
 SandQueryMessage是query message, 它的特殊操作如下;
 @ addMatchInfo(SandAttrVal)
 @ setMatchInfo(SandAttrVal[])
 @ setOrderBy(String)/getOrderBy()
 @ setOperationFields(String)/getOperationFields()
 @ matches(SandStructMessage)
 @ setMaxReturn(int)/getMaxReturn()
 其中关键的是SandAttrVal类,在这个类中,有两个属性:attr和val. attr表示属性的名称, val表示这个属性的匹配
条件(可以带匹配条件,比如:!=20、=20).
 
 3. SandCollectionMessage
 SandCollectionMessage是一个容器,它用来表示SandQueryMessage返回的结果集。也就是用来存储多个SandInstanceMessage
对象(我们当前只关心SandStructMessage)。比如,它上面有一些特殊的方法:
 @ removeElement/addElement(SandInstanceMessage)
 @ getElements()
 @ setQueryResult/getQueryResult()---返回对应的query function,query function是什么东东?
 
 
 4. SandUpdateMessage
 表示对一个SandStructMessage进行update,它上面的特殊方法为:
 @ setAction(int)/getAction()
 @ setInstance(SandStructMessage)/getInstance()
 其中setAction中的action有以下几个值:ACTION_UPDATE, ACTION_ADD, ACTION_DELETE, ACTION_UNDEFINED.

 问题: 它是如何解决"乐观锁/悲观锁"问题?
 答: 它在对象中使用一个vision属性,用来唯一标识版本(保证更新之前别人没有更新过)
 
 
 5. AggregateUpdate
 提供同时对多个SandStructMessage进行update的能力。它实现的时候聚合了多个SandUpdtaeMessage对象。关键方法如下:
 @ addUpdate(SandUpdateMessage)
 @ setUpdates(SandUpdateMessage[])
 @ getUpdates()
 
 三、基于OWL/RDF描述的通用CRUD消息设计
 类体系如下:
CRUDMessage
 OWLMessage
  ...
 VerbMessage
  AggregateUpdateMessage
  UpdateMessage
   ...
  QueryMessage
   ...
  CollectionMessage
   ...

 详细说明:
 1. CRUDMessage:所有消息的基类
 
 2. OWLmessage: 定义CURD操作的"数据模型",例如Person...
 使用通用的OWL定义一个业务对象类即可.
 
 3. QueryMessage: query Message
 它有一些特殊的属性:matchs, maxResult, minResult, orderBy. 其中matchs是一个ObjectProperty,
它的range是MatchItem.
 MatchItem有两个属性:attr和val。 attr的range是Property, val是一个String,它包含了逻辑操作符
(如 >, !=)。 
 
 
 4. CollectionMessage: query出来的结果集, 它聚合了多个OWLMessage实例
 它主要有一个属性:
<owl:ObjectProperty rdf:ID="owlMsgs">
 <rdfs:domain rdf:resource="#CollectionMessage"/>
 <rdfs:range rdf:resource="#OWLMessage"/>
</owl:ObjectProperty>
 这个属性可以多个值
 
 
 5. UpdateMessage: update一个OWLMessage。它聚合了一个OWLMessage和一个操作(update, add, delete)
 它主要有两个属性:
<owl:ObjectProperty rdf:ID="owlMsg">
 <rdfs:domain rdf:resource="#UpdtaeMessage"/>
 <rdfs:range rdf:resource="#OWLMessage"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="action">
 <rdfs:domain rdf:resource="#UpdtaeMessage"/>
 <rdfs:range rdf:resource="#Action"/>
</owl:ObjectProperty>
 Action是一个枚举类型, 可以有以下值:update, add, delete
 
 
 6. AggregateUpdateMessage: 同时更新多个OWLMessage
  这个OWL类有一个属性:
<owl:ObjectProperty rdf:ID="updates">
 <rdfs:domain rdf:resource="#AggregateUpdtaeMessage"/>
 <rdfs:range rdf:resource="UpdateMessage"/>
</owl:ObjectProperty>
 这个属性可以多个值.
 
 7. 解决"乐观锁/悲观锁"问题
  在OWLMessage中保存一个vision来解决.

相关文章推荐

产生随机数:sand()和rand()函数用法

个人认为较为可靠的产生随机数的代码范例: 例如产生 min~max 范围的整数随机数 #include   #include   #include   # define MIN 10...

SAND Netword

  • 2013年05月03日 14:03
  • 41KB
  • 下载

CE2SAND操作手册

  • 2015年03月31日 20:23
  • 3.51MB
  • 下载

Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自【张鸿洋的博客】很多人面试肯定都被问到过,请问Andro...

srs sand box

  • 2015年07月21日 10:54
  • 7.63MB
  • 下载

c++的随机函数(rand,sand)的用法

  • 2011年06月19日 16:55
  • 28KB
  • 下载

Python网络编程:E-mail服务(五)深入理解email模块的message和MIME类

本文主要介绍Python标准库email的message和MIME类,并分析了相关的实现,能够是读者更好的使用email模块。...

Android Handler 异步消息处理机制二:源码解析,深入理解Looper、Handler、Message三者关系

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38377229 ,本文出自【张鸿洋的博客】 很多人面试肯定都被问到过,请问A...

深入理解异步消息处理机制Message,handler,MessageQueue,looper

本文转自: http://www.cyqdata.com/android/article-detail-36658 本篇深入理解Android消息队列原理篇,将为您讲述Android世界中...
  • jeffleo
  • jeffleo
  • 2016年03月20日 09:42
  • 541

深入Protobuf源码-Descriptor、Message、RPC框架

深入Protobuf源码-Descriptor、Message、RPC框架 Descriptor框架 对非optimize_for为LITE_RUNTIME的proto文件,protobuf编...
  • mitesi
  • mitesi
  • 2015年04月24日 17:12
  • 657
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入Sand之--Message分析
举报原因:
原因补充:

(最多只允许输入30个字)