如何使用面向对象编程方式实现--《万能罗》(完整剧本)

来源:互联网 发布:java数据连接池原理 编辑:程序博客网 时间:2024/04/30 10:52
编程语言发展,大家都知道的几个重要阶段:面向机器->面向过程->面向对象。
 
面向对象之后呢?
面向方面(适用场合:缓存处理、权限认证等)、面向领域(这方面的资料也特别少,如果对领域设计感兴趣的,可以参考《领域驱动设计-软件核心复杂性应对之道》,简称:DDD)。
不管是面向方面还是面向领域编程,都是对面向对象的加强,是辅助开发人员走向面向对象编程的一个途径。
 
在使用面向对象语言(如java),写代码的时候,是不是经常不自觉地就使用了面向过程的思维了?这说不定是因为MVC用的多引起的。
 
传统的MVC用法一般的分工如下(可能并不准确,水平有限,不好意思^_^):
1、实体类:定义属性、getter和setter方法
2、使用DAO访问数据库,对保存到数据库的实体bean的数据进行CRUD操作
3、使用Service处理业务逻辑,并可能需要使用到DAO获取或保存实体bean的数据。
4、使用Controller跟界面交互:根据用户的请求,可能需要调用service来处理相关业务逻辑,然后把结果返回给页面展现给用户。
大家用惯了MVC,觉着这都是很自然的事情。但上述的MVC用法来做开发的一个比较严重的问题是--所有的实体,都是没有生命力(有人称之为:失血模型),这跟面向对象的思想是背道而驰的。
当然,MVC功不可没,它让开发人员形成了明确的层次划分的面向对象的基本思想。造成”失血模型“的原因,其实并不在于MVC本身,而是大家都被“教科书”或“网络知识”给误导了。
 

我在09年使用ROR来做项目的时候,发现ROR比起java,有不少东西感觉更面向对象,跟现实世界更接近,举个例子:实体就像现实生活中的人,能够不断学习增长技能(ruby语言的类是允许动态添加功能的);另一个例子:使用ROR,基本上不需要关注ORM技术领域,让你的精力都放在业务领域,对ORM的CRUD操作,是ROR实体的固有能力(但用java做项目,不少的精力得花在这上面,而且是重复地花):
@Test
 public void persist(){
  user = (ActorUser) user1.clone(); 
  user.setId(0);
  user.persist();  //CRUD,在ROR中,是实体的固有能力(有些java文献想实现同样的效果,把DAO往实体里注入,造成“溢血模型”)
  user1.setId(expectedTotalUserCount+1);
  assertEquals(user, user1);
 }
 
@Test
 public void remove(){
  ActorUser actual = em.find(entityClass, user1.getId());
  assertEquals(actual, user1);
  user1.remove();  //CRUD,在ROR中,是实体的固有能力
  actual = em.find(entityClass, user1.getId());
  assertNull(actual);
 }
 
为了纠正”失血模型“,有人就把很多功能都集中到实体中(是不是ROR引起的思想改变?),甚至有人把DAO都往实体中注入,结果,实体又变得很臃肿(有人称之为:溢血模型)
 
对象职责划分恰到好处的模型,有人称之为:富血模型。

尝试使用java语言实现一下《小猪小罗成长记》,也许能让你去思考些东西。现在又推出了续集《万能的小罗--1网管记和2会计员记》。
 
如果有人对《小猪小罗成长记》和《万能的小罗》感兴趣,可以拿出你的源码一起分享、探讨。
 
附:
《小猪小罗成长记》
--原著:胡添发(hutianfa@163.com)
 
声明:本故事情节纯属虚构,如内容或人名雷同,纯属巧合。有人对这个感兴趣吗?用java语言实现试试看?
人物介绍:
1、小罗:女,某著名IT公司的行政,像公司网络问题等原本不该由她负责的东西,因为相应岗位人员长期缺失,只要硬着头皮上,结果,造就出了”无所不能“的能力,大家都称她为”万能罗“。
2、小猪:男,小罗的老公
3、国强:男,某著名IT公司的研发高手,网络高手,经常在公司网络有问题,”万能罗“解决不了时候,该他出手时就毫不犹豫地伸出热情、专业之手。
4、Joey,男,美国著名的牧师

情景1:很久很久以前,他们才1岁
少儿(未满12岁)做三件事:
1、小猪、小罗做自我介绍
2、小猪、小罗去上学咯(托儿所)
3、小猪、小罗玩过家家。
 
我的名字叫:小猪, 今年:1 岁。
我的名字叫:小罗, 今年:1 岁。
大家好,我叫:小猪,我上托儿所。
大家好,我叫:小罗,我上托儿所。
玩过家家咯,我是:小猪,我要做:爸爸。
玩过家家咯,我是:小罗,我要做:妈妈。
 
情景2:三年之后
做三件事:
1、小猪、小罗做自我介绍
2、小猪、小罗去上学咯(幼儿园)
3、小猪、小罗玩过家家。
 
我的名字叫:小猪, 今年:4 岁。
我的名字叫:小罗, 今年:4 岁。
大家好,我叫:小猪,我上幼儿园。
大家好,我叫:小罗,我上幼儿园。
玩过家家咯,我是:小猪,我要做:爸爸。
玩过家家咯,我是:小罗,我要做:妈妈。
 
情景3:又过了三年,他们7岁了
做三件事:
1、小猪、小罗做自我介绍
2、小猪、小罗去上学咯(小学)
3、小猪、小罗玩过家家。
 
我的名字叫:小猪, 今年:7 岁。
我的名字叫:小罗, 今年:7 岁。
大家好,我叫:小猪,我上小学:1 年级。
大家好,我叫:小罗,我上小学:1 年级。
玩过家家咯,我是:小猪,我要做:爸爸。
玩过家家咯,我是:小罗,我要做:妈妈。
 

情景4:5年之后,他们已经12岁了,想做少儿的事情
结果:老大不小了,还像小孩啊?
 
情景5:过家家不能玩了,那就玩一下大人(年满18周岁)的结婚吧
结果:你是未满18岁的小孩哦
 
情景6:又过了6年,他们已经18岁了,结婚去咯
他们找到了Joey牧师,为他们主持婚礼,婚礼的过程:
 
大家好,我是牧师-Joey,现在婚礼仪式正式开始!
牧师问新郎:小猪,您愿意娶:小罗 为妻,并不论生老病死,一辈子都照顾她吗?
新郎回答:我愿意娶小罗为妻,不论生老病死,一辈子照顾她。
牧师问新娘:小罗,您愿意嫁给:小猪 为妻,并不论生老病死,一辈子都跟随他吗?
新娘回答:我愿意嫁给小猪为妻,不论生老病死,一辈子都跟随他。
 
牧师:现在双方交换戒指:
新郎给新娘戴结婚戒指。
新娘给新郎戴结婚戒指。
 
牧师:现在双方可以亲吻了:
新郎亲新娘。
新娘亲新郎。
牧师:我宣布,新郎-小猪、新娘-小罗,正式成为合法夫妻。
 

续集《万能的小罗1--网管记》
--原著:胡添发(hutianfa@163.com)
***情景7:万能的小罗1--网管记***
 
解说员:某著名的IT公司,却没有专业的网管,网络经常断了,这次断网的原因比较简单,万能的小罗登场了......
小罗:大家好,我是万能的小罗,简单的网络问题,我一个人搞定了。
 
解说员:这次断网原因比较复杂的情况,万能的小罗登场了......
小罗:大家好,我是万能的小罗,复杂的网络问题,我再万能也搞不定,得找高手帮忙才行。
 
解说员:与其自己单干、蛮干,不如找专业一点的人,小罗,国强是网络高手......
小罗:大家好,我是万能的小罗,复杂的网络问题,我找到了高手 国强 来帮忙搞定了。
 
***情景8:万能的小罗2--会计员记***
 
解说员:21世纪,什么最值钱?人才!没有会计,钱是个问题,怎么办?有万能的小罗在,不过,她没有会计证,暂时不能上岗。
 
报名:我是小罗,公司缺会计,要我先顶着,我得先报名过了考试才行,赶紧报名去咯。
 
复习:快要考试了,我得赶紧复习,争取一次通过,我读,我读,我读读读......
 
考试:很久没考试了,想当年,我身经百战,现在却冒汗......
太好了,题目都是我复习过的,没复习到的都没出。
一周过后,查分数,已顺利通过。
 
上岗:我现在也是一名持证会计师,每天都得算啊算,什么时候能够办公自动化就好了,不用算得这么辛苦,OA啊,救救我吧!
 
原创粉丝点击