我上次已经全部写完DJ的语法部分了。结果提交之后,却发现MSN只给我保留了三段,实在是郁闷啊。还是再整理一下思路,接着说罢。
在dclass的定义中,数据被分为key_datatype定义与datatype定义。相应的,也只有InitChannel,能够设置key_datatype的数据(而且只能设置一次)。可以分为两种情况:
User u=dnew User();
...
u.save();
这时User中的InitChannel将会将数据持久化,并未原本为空的user_id赋值一次。
User u=dnew User(1);
...
u.save();
这时系统实际上会调用InitChannel中的create(int)方法,以确认持久化数据中(大多数情况下,是判断数据库中是否已经有user_id=1的记录)。如果有,则抛出异常,否则就为user_id赋值。
其余的Channel,对于key_data数据,都只能读取,不能修改。
3、对象间的关系
在传统的面向对象的世界中,对象之间存在的关系是不可见的。ObjectA与ObejctB有没有关系,ObjectC肯定是无法知道的。甚至,ObjectA知道自己与ObjectB有关系,ObjectB自己都不知道。而在DJ中,动态对象之间的关系,是显式地,以独立的关键词定义的。之前我的设想是将relation:部分包含在dclass定义之中,现在看来是与我对于DJ的其他理念相互矛盾了,所以我还是打算将relation提升为与datatype、channel、event同等级别的独立概念,用法示例如下:
relation User2Forum<User u,Forum f>:More2More{
public void getFullList(){
//如果希望DataCache,就实现这个方法,否则就空着
}
public List getLeftList(int forum_id){
//有cache就读cache,没有就直接访问数据库
}
public List getRightList(int user_id){
}
public void addRelation(int user_id,int forum_id){
}
public void delRelation(int user_id,int forum_id){
}
public void modifyRelation(int old_user_id,int new_user_id,int old_forum_id,int new_forum_id){
}
}
所有的关系,一共分为五类:One2Null,One2One,One2More,Null2More,More2More。所有的关系,无论什么类型,都需要实现getLeftList,getRightList方法,至于addRelation、delRelation、modifyRelation,则与关系的类别有关,大家自己推算一下,其中的道理也很简单的。
有了这样的关系概念之后,DJ中的关系查询的代码大概是这样的:
User u=dget User(1);
List forumList=u.getRightList("User2Forum");
//这里不用写user_id,动态对象会自行调用相应的relation中的getRightList()方法。
通过以上的介绍,熟悉ORM的朋友应该可以感受到DJ的创新之处,有了这样的语言级的支持,做个基于DJ的O/R Mapping,应该是易如反掌的事情。但是,作为语法,DJ并不具体牵涉数据访问的工作,如果你愿意,你可以在所有InitChannel中,将数据保存到XML中去。而在所有的Relation中,你可以将所有的关系保存在关系型数据库里。这样的功能很无聊,但是DJ也是可以支持的。
各位朋友,关于DJ的初步的语法介绍,到此就告一段落了。当然,牵涉到具体的细节,还需要说明很多的东西。我的打算是,从现在开始研究ANTLR,然后着手开始实现一个DJ的编译器,然后再将能够见人的代码直接放出来供大家评价和试用。
至于这个OO丧钟系列,我还没有写完,嘿嘿......
接下去我打算写的,是基于DJ的软件分析与设计的思路。敬请关注!
(未完待续)
分享到:
相关推荐
20210509-信达证券-化工行业:敲响轮胎消费时代的钟声!.pdf
【标题解析】:“图片购物搜索淘淘搜:敲响美丽说们的丧钟?”指的是新兴的电商搜索工具“淘淘搜”通过创新的图片购物搜索功能,对以美丽说、蘑菇街为代表的图片购物网站构成潜在的竞争威胁。 【描述概要】:文章...
化工行业:敲响轮胎消费时代的钟声!.pdf
化工行业:敲响轮胎消费时代的钟声!(30页).pdf
在当前数字化时代,浏览器已成为人们日常生活中不可或缺的一部分。从简单的网页浏览到复杂的在线交易,浏览器承担着数据传输、应用运行和信息交互的重要任务。然而,随着网络攻击手段的日益翻新,浏览器安全问题也日...
化工行业:敲响轮胎消费时代的钟声!(2021)(30页).pdf
提到的“丧钟为谁而鸣”,这句话源自约翰·多恩的诗句,意味着每个人的死亡都是所有人的损失,每个人都在为自己的死亡敲响丧钟。在这里,读者被提醒珍惜当下,因为生命无常,每一刻都可能是最后的时刻。同时,这也...
在当今这个快速发展的时代,环境问题已经成为了全球关注的焦点,而地球的未来,更需要我们每一个人的关心与参与。在小学六年级的道德与法治课堂上,“地球——我们的家园”这一主题旨在让学生们深入理解环境问题的...
例如,微软Azure证书问题和亚马逊断电事件都给使用BaaS模式的开发者敲响了警钟,他们需要对数据安全和云服务的可靠性有充分的认识。 从2010年开始,已经有至少40家企业专注于提供BaaS服务。国内也有专注于BaaS服务...
天涯总裁邢明回应数据泄露:给我们敲响警钟.docx
《丧钟为谁而鸣.docx》这篇文档,虽然没有直接涉及IT技术的细节,但却深刻地反映了在数字化社会中,我们如何面对人文关怀和社会责任的问题。 文档开篇的质问“丧钟为谁而鸣”是一个哲学性的设问,它引导我们去思考...
随着新年的钟声敲响,我们迎来了一年之初的开门红,这不仅是一个时间节点的象征,更是一个充满希望与机遇的开始。在这样的背景下,2013年,我们公司选择以一场盛大的年会来庆祝这一历史性的时刻,而“2013开门红——...
《传统文化的继承与弘扬——社会实践活动调查报告》深入探讨了这一主题,并对如何在新时代背景下保持和发扬传统文化提出了见解。 报告指出,当前全球化趋势下,中国传统文化面临种种挑战。西方节日文化的流行和渗透...
然而,以android和iphone手机为代表的智能移动设备的发明却敲响了pc时代的丧钟!移动互联网时代(3g时代)已经来临,谁会成为这些移动设备上的主宰?毫无疑问,它就是android——pc时代的windows! 移动互联网还是...
例如,腾讯云出现的物理硬盘固件版本bug导致数据丢失事件,以及云服务商Cloudflare因编程错误导致用户数据泄露等,都对云计算数据安全敲响了警钟。 云计算数据安全研究的挑战在于,如何综合运用现有的技术手段和...
根据国际数据公司(IDC)的统计,过去三年全球产生的数据量已超过过去四百年总和的数倍,这些数据不仅包括传统的结构化数据,更多的是图片、视频、网页等非结构化数据。其中,80%的数据是非结构化数据,这对传统的数据...
Window操作系统的诞生成就了微软帝国,同时也造就了PC时代的繁荣,然而如今,以Android和iPhone手机为代表的智能移动设备的发明与互联网云技术的兴起却敲响了PC时代的丧钟!这也预示着移动互联网时代(3G)已经来临。 ...
在现代化城市建设的浪潮中,高层建筑如雨后春笋般拔地而起,与此同时,施工电梯作为建筑工地不可或缺的垂直运输工具,在提升物料和人员方面发挥着至关重要的作用。然而,施工电梯的安全问题也日益凸显,成为业界关注...
《小学生时代》杂志成为作者在疫情居家期间的精神食粮,它不仅是信息的载体,更是时代精神的镜像。这本杂志让我深刻感受到疫情对社会和个体生活的深远影响,同时也让我对那些在疫情前线勇敢战斗的人们致以最深的敬意...
在全球信息化浪潮中,数据泄露事件频发,给企业和个人带来了巨大的安全威胁和经济损失。DLA Piper发布的“数据泄露调查”报告,为我们提供了一个...在数字化时代,让我们共同努力,从自身做起,守护数据安全的防线。