数据对象名词解释

         在Java EE系统中各层次中对数据的处理是以对象形式进行的,而对于各层次中所处理的对象的名称是以其被赋予的功能所确定。以下界定了不同功能的对象在名称上和功能上的定义。

Value Object: 泛指用于表示和携带数据的对象。它其中又包含了一些特殊的,对我们的系统有特殊作用的对象,有Persistent ObjectDomain ObjectView Object对象。这些特殊对象将在以下做具体定义。

Persistent Object (PO)表示需要被持久化的Value Object

Domain Object (DO): 表示业务对象,指在业务操作时与业务流程直接相关的对象。本规范认为Domain ObjectBusiness Object表示的是相同的意思,因此在今后的沟通和开发中将不使用Business Object或其缩写BO对业务对象进行称呼。

View Object (VO): 展示对象,只用来负责存储用于页面展示数据的对象。不参与业务的流程。

在以上所定义的4种对象中,Value Object的定义比较泛,它包含了其它3种对象。而其它3种对象也不是相互独立的,一个对象可以同时为Persistent ObjectDomain ObjectView Object(见下图中的D区域),也可以只是Persistent ObjectDomain ObjectView Object。例如,一个购物车对象参与了业务流程,但是它通常并不需要被持久化,因此它是一个Domain Object却不是一个Persistent Object;而一个配置信息对象通常需要持久化却不参与业务流程,因此也只是一个Persistent Object;一个用户对象通常既参与业务流程也需要持久化其状态,所以它既是Domain Object也是Persistent Object,既A区域;而当我们需要直接将这个用户对象推送到页面去显示时它又同时肩负起了View Object的责任,既D区域。

一个对象的命名应遵循以下一些通用步骤:

1.     选定需要被命名的对象。

2.     将该对象与上述定义进行匹配并放入图中的相应位置

3.     如果该对象被放入了图中有交集的位置,按照Domain Object > Persistent Object > View Object > Value Object的优先级确定其名称。

对于WebX框架来说,我们所有业务对象都既是Persistent Object也是Domain Object,也就是说WebX框架中所有的业务对象都处于图中A区域。按照命名规则,Domain Object > Persistent Object,则在今后WebX的沟通和开发中我们以Domain Object的缩写DO进行统一称呼。在WebX框架中我们存在展现层对象View Object,对于该对象我们将使用其缩写VO进行称呼。这里需要注意的是由于Value Object的缩写与View Object的缩写相同,因此在今后的称呼时如需要对Value Object进行称呼时不可使用缩写。

递归数据结构指的是若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象是递归的。在数据结构领域,若一个数据结构部分地包含它自己,就称该数据结构是递归的。 递归数据结构在很多场景下会被运用,例如树森林就是以递归的方式定义的。像树图的很多算法都是以递归来实现的,很多数学公式也以递归的方式定义,如斐波拉契序列 1, 2, 3, 5, 8, 13, ... 。 从设计思想来看,对于涉及递归数据结构的问题,需要寻找递归关系确定递归出口。递归关系是将整个问题分解成若干个子问题,部分子问题的解决方法解决整个问题的方法一样,通过分别求解子问题,最后获得整个问题的解。递归出口则是子问题继续分解,直到无需再分解或不能再分解,能直接得到结果的情况。在递归算法设计时,先判断是否满足出口条件,满足则执行出口操作,否则用同样的方法解决子问题。由于每一次递归调用进入下一层时,为了能正确返回并继续操作,需要存储返回地址及过程中使用的参数、局部变量等,且返回时的次序与进入的次序正好相反,所以利用栈的组织空间存储每层信息,形成递归工作栈 [^2][^3]。 利用递归可以用简单的程序来解决一些复杂的问题,它把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大减少了程序的代码量,其能力在于用有限的语句来定义对象的无限集合 [^4]。 以下是一个利用链表结点的结构遍历表中每个结点的递归代码示例: ```cpp #include <iostream> using namespace std; // 定义链表节点结构 struct LinkList { int data; LinkList* next; LinkList(int val) : data(val), next(nullptr) {} }; // 递归遍历链表 void Traverse2(LinkList* L) { if (L == nullptr) cout << "Error"; else { cout << L->data; Traverse2(L->next); } } int main() { // 创建链表 1 -> 2 -> 3 LinkList* head = new LinkList(1); head->next = new LinkList(2); head->next->next = new LinkList(3); // 调用递归遍历函数 Traverse2(head); return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值