SOJO基础知识
SOJO基础知识
POJO大家并不陌生,可是SOJO大家知道吗?SOJO英文全称“Simplified Old Java Objects”意即简化你的java对象。SOJO框架的目标是将javaBeans转化为一种简单的表示方式,转换为诸如JSON, XML或者任何易于同非java程式交互的格式。
SOJO通过管理“循环变量”(with cycle detection)来转换和标识复杂的演变的java对象。这个转换设备是可插拔的,所以你可以以自定义的形式实现并使用。
虽然POJOS是如此的重要和有用,可是在有些场景下它必须和非java环境和系统交互,所以POJOS就显得无能为力,这就是SOJO要解决的问题:
-
data interchange (interchange): 数据交换
- JSON (JavaScript Object Notation) a lightweight data-interchange format
- Object To XML - where is XML-RPC a special case
- Comma Separated Values (CSV)
- Java serialization, without implements the interface java.io.Serializable (e.g. cluster, cache, remote communication, ...)
-
operation of complex Java-Objects-graphs (common / navigation): 操作具有继承关系和不同版本的java对象
- copy or clone complex object graph (can manage different versions from one object graph (object history))
- compare complex object graph
- walk over object graph (to traverse)
- extend objects to additional information (e.g.: object-versions (number of changes), data changed date or changed user)
- easy navigate on the complex object graph (with a navigation language)
- mapping from one property to other property (name to name mapping (by naming conflicts) or value to value mapping (to convert values))
- making object-values immutable, for testing concurrent access - multi threading)
-
remote acces/communication: 远程访问和交互
- HTTP protocol - request and response are based on String represantation
- RMI (Java-Object must serializable (marshalling) or deserializable (unmarshalling))
- WebService or XML RPC - convert Java-Object in special String represantation, in XML
- create "value objects" or "transfer objects" to sent objects over the network
-
data access: 数据访问
- object/relational persistence respectively object/relational mapping
- flat files (convert Java-Object-Graph to a flat represantation)
- property files (e.g. convert Strings to Long, Date, ... by reading a property file and map the value to setter from a Bean)
- legacy systems
-
GUI interface: gui接口
- transform business models to GUI-models (DataBinder)
- every changes on the GUI-model must to notice (integrated PropertyChangeListener or VetoableChangeListener)
- and so on ...
SOJO将会比较简单的解决以上问题。