深入Sand之--Message分析

来源:互联网 发布:淘宝图片ps处理教程 编辑:程序博客网 时间:2024/06/01 09:42

                                                                             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来解决.

原创粉丝点击