请首先注意这篇文章标题,在DJ的语言中,有天生的持久化的概念。但是,与通常对于持久化的理解不同的是,这不是“对象的持久化”,而是“数据的持久化”。
在我看来,正统的OO概念中,对象=数据+方法。那么,对象内部的数据可以持久化,对象的相关方法如何持久化呢?有没有必要持久化呢?对于“对象的持久化”,更加准确的定义是:“以对象为单位的,对象内部数据的持久化”。
对于DJ来说,自然也存在一个持久化的单位问题。OO的持久化单位仅仅只有对象,而DJ的持久化分为两类:动态对象数据的持久化;动态对象之间关系的持久化。如果按照典型的关系型数据库分析的E-R模型来理解,将会相当容易。关系数据库中的实体=>DJ中的动态对象;实体间的关系=>DJ中的关系。
说到数据持久化,自然应该包含两类、三个部分:一个全新的实体(关系)如何建立;一个老的实体(关系)如何从持久化介质中获取;一个已经在内存中被修改的实体(关系)如何保存。在这其中,最为复杂的问题是,被修改的实体与关系,何时应该被保存?这个时机如何判断,最为困难。
OO对于数据持久化的支持相当成问题:
1、对象的初始化,被简简单单的一“new”了事。到后来设计模式中的重要的一类“创建型模式”,其实都是在解决这方面的难题。
这个问题DJ的解决方案是,每个动态对象,都需要定义一个,而且是唯一的一个InitChannel。在InitChannel中,开发者必须实现create(); load(); save(); delete();这四个与持久化有关的函数。假设这个动态对象不需要被持久化,则开发者可以写完全不工作的load(); save(); delete();但是create则是必须要有的。因为,一个对象在被初始化的时候,有两种形式,dnew UserObj();以及dget UserObj(key);dnew是一个创建新动态对象的关键字,这个操作会去调用InitChannel中的create()方法,并且要确保方法执行完成之后的动态对象内部的数据,的确实dclass定义时指定的类型。
2、如何区分两个同类型的对象,也是一个难题。在java中,相等的判定有两个方法:“==”和“equals”。前一个方法,基本上没有意义,两个对象是否同为一个地址,其实应该是叫做“同一性”判断,而不能叫做“相等性”判断。而“equals”,则完全是自定义的,没有限制。通常的惯例是:比较两个对象中部分或全部的内部数据。在DJ中,这个问题是这样被解决的:
key_datatype:dclass定义中,允许包含key_datatype域,如果在dclass的定义中,没有这个部分的定义,则这个动态对象,将是一个天然的单例对象。如果包含key_datatype域,则不同的KeyData,自然对应不同的动态对象,两个对象如果KeyData相同,则一定是指向内存中的同一个对象。
dnew与dget:DJ的语法中有区分创建与获取操作。
|
有key_datatype域 |
无key_datatype域 |
dnew User() |
创建一个新的动态对象,在尚未持久化之前,KeyData为空值 |
获得一个单例对象 |
dnew User(key) |
以指定key值为KeyData创建一个新的动态对象,如果这个对象原本已经存在,则会抛出异常 |
不正确的用法,因为key值无意义 |
dget User() |
不正确的用法,因为没有指定KeyData |
获得一个单例对象 |
dget User(key) |
以指定key值为KeyData,查找一个对象,如果内存中没有,则load(key),如果load结果为空,则抛出异常 |
不正确的用法,因为key值无意义 |
所有的dnew与dget操作,都是与DJ内置的一个动态对象容器打交道,因此实现单例模式,数据缓存之类的工作,自然易如反掌。
(未完待续)
分享到:
相关推荐
20210509-信达证券-化工行业:敲响轮胎消费时代的钟声!.pdf
【标题解析】:“图片购物搜索淘淘搜:敲响美丽说们的丧钟?”指的是新兴的电商搜索工具“淘淘搜”通过创新的图片购物搜索功能,对以美丽说、蘑菇街为代表的图片购物网站构成潜在的竞争威胁。 【描述概要】:文章...
化工行业:敲响轮胎消费时代的钟声!.pdf
在当今这个快速发展的时代,环境问题已经成为了全球关注的焦点,而地球的未来,更需要我们每一个人的关心与参与。在小学六年级的道德与法治课堂上,“地球——我们的家园”这一主题旨在让学生们深入理解环境问题的...
化工行业:敲响轮胎消费时代的钟声!(30页).pdf
在当前数字化时代,浏览器已成为人们日常生活中不可或缺的一部分。从简单的网页浏览到复杂的在线交易,浏览器承担着数据传输、应用运行和信息交互的重要任务。然而,随着网络攻击手段的日益翻新,浏览器安全问题也日...
化工行业:敲响轮胎消费时代的钟声!(2021)(30页).pdf
提到的“丧钟为谁而鸣”,这句话源自约翰·多恩的诗句,意味着每个人的死亡都是所有人的损失,每个人都在为自己的死亡敲响丧钟。在这里,读者被提醒珍惜当下,因为生命无常,每一刻都可能是最后的时刻。同时,这也...
例如,微软Azure证书问题和亚马逊断电事件都给使用BaaS模式的开发者敲响了警钟,他们需要对数据安全和云服务的可靠性有充分的认识。 从2010年开始,已经有至少40家企业专注于提供BaaS服务。国内也有专注于BaaS服务...
天涯总裁邢明回应数据泄露:给我们敲响警钟.docx
《丧钟为谁而鸣.docx》这篇文档,虽然没有直接涉及IT技术的细节,但却深刻地反映了在数字化社会中,我们如何面对人文关怀和社会责任的问题。 文档开篇的质问“丧钟为谁而鸣”是一个哲学性的设问,它引导我们去思考...
随着新年的钟声敲响,我们迎来了一年之初的开门红,这不仅是一个时间节点的象征,更是一个充满希望与机遇的开始。在这样的背景下,2013年,我们公司选择以一场盛大的年会来庆祝这一历史性的时刻,而“2013开门红——...
《传统文化的继承与弘扬——社会实践活动调查报告》深入探讨了这一主题,并对如何在新时代背景下保持和发扬传统文化提出了见解。 报告指出,当前全球化趋势下,中国传统文化面临种种挑战。西方节日文化的流行和渗透...
在全球信息化浪潮中,数据泄露事件频发,给企业和个人带来了巨大的安全威胁和经济损失。DLA Piper发布的“数据泄露调查”报告,为我们提供了一个...在数字化时代,让我们共同努力,从自身做起,守护数据安全的防线。
例如,腾讯云出现的物理硬盘固件版本bug导致数据丢失事件,以及云服务商Cloudflare因编程错误导致用户数据泄露等,都对云计算数据安全敲响了警钟。 云计算数据安全研究的挑战在于,如何综合运用现有的技术手段和...
根据国际数据公司(IDC)的统计,过去三年全球产生的数据量已超过过去四百年总和的数倍,这些数据不仅包括传统的结构化数据,更多的是图片、视频、网页等非结构化数据。其中,80%的数据是非结构化数据,这对传统的数据...
然而,以android和iphone手机为代表的智能移动设备的发明却敲响了pc时代的丧钟!移动互联网时代(3g时代)已经来临,谁会成为这些移动设备上的主宰?毫无疑问,它就是android——pc时代的windows! 移动互联网还是...
在现代化城市建设的浪潮中,高层建筑如雨后春笋般拔地而起,与此同时,施工电梯作为建筑工地不可或缺的垂直运输工具,在提升物料和人员方面发挥着至关重要的作用。然而,施工电梯的安全问题也日益凸显,成为业界关注...
《小学生时代》杂志成为作者在疫情居家期间的精神食粮,它不仅是信息的载体,更是时代精神的镜像。这本杂志让我深刻感受到疫情对社会和个体生活的深远影响,同时也让我对那些在疫情前线勇敢战斗的人们致以最深的敬意...
Window操作系统的诞生成就了微软帝国,同时也造就了PC时代的繁荣,然而如今,以Android和iPhone手机为代表的智能移动设备的发明与互联网云技术的兴起却敲响了PC时代的丧钟!这也预示着移动互联网时代(3G)已经来临。 ...