对着饭馆弹IT的琴--抽象,抽象!
天热时长期出差,找到一家新开的排骨饭店,天天去解决肚子的需求。
饭店产品简单,只做排骨饭,分为:
“小份加菜”-- 7元;
“小份原汤”--10元;
“大份加菜”--12元;
“大份原汤”--15元 。
味道很不错啊,等回去后,我辞职不做程序员,也开一家……噢,有些走题了。
小店原来有一位小妹,勤快呢,不过我有些不喜欢她……因为,出差难免很穷,每次都是挑“小份加菜”---便宜嘛。可恨这小妹叫菜时,都是直接叫价的,什么“5号桌客官15元”,什么“2号桌7元……”。凭什么我的售价比那人少8块钱啊?就因为我瘦?要是不瘦,能有排骨吗?要是没有排骨,他们能开这店吗?————等下,这逻辑好像有些问题,一时想不清,先不计较了。
生意不错,几天后排骨饭店老板又请了一位小妹。听说是大学生暑期来打工的噢,再一问,居然读软件设计的!呀,这下和我有共同语言呢!天天吃饭和这位新小妹聊两句,感觉出差的日子也不错嘛……
有一天,新小妹和我探讨起编程。她说:“这个饭馆像一个程序……”
“噢?这个?那个?是吗?”
“为了更好地服务你们这些Client,饭馆程序采用了类似MVC的技术设计”
“嗯……”我在追忆 MVC。
“M/Model/模型,负责完成任务所需要的行为和数据,所以这是厨师的角色。V/View/界面则是小妹我,所以小妹我穿着漂亮,是吧?”
“那是那是”,我趁机多瞟了新小妹几眼,果然水灵可爱。不过,她和我说这些做什么呢?难道她是想借机排斥原来的小妹不漂亮?想到此,我下意识地看看邻桌的“旧”小妹。其实……旧小妹长得也怪丰满迷人……可能是饿了,我感觉要流口水。不料那旧小妹突然一声高叫“这位先生10元钱!!”,把我给吓回神来了。
果然,我看到新小妹也很鄙夷地看了旧小妹一眼,然后继续说:“老板当然就是Controller了。他控制我们这些View和厨师那些Model如何进行交互”。
“是吗?”我听得有些一头雾水。
“比如,通过菜单”,她把那份什么“加菜,原汤”的东东搬出来,“菜单限制了View们只能向Model提出即定范围的请求————简单地说,就是我们不可能随便叫厨师们做一样菜单上没有的东东。如果确实需要,只有Controller才有权去修改菜单……”
我算是有些明白了“那很不错啊。MVC模式,呵呵,真的不错”。心里暗想,回家后,是得去强化复习MVC。
新小妹话题一转:“但是我谈的重点不是MVC。我想说的是,老板有一点没有做好……”
“这我知道,既然有了你,他是完全不应该再留着那个小妹……”
“什么啊?”新小妹白了我一眼:“Controller在有关V和M交互上,某个细节上没有控制好!你听,她又在叫了!”
确实,那个旧小妹又在叫了:“这位客官,10元钱一份……”
我越发明白了:“你是说,这位旧小妹向厨师叫菜的方法不对?”
“没错!”
新小妹一汪清水的双眼看着我(我感觉自己那颗寂寞已久的心在飘),她继续说:“不可避免的某些时候,View必须直接与Model发生关系,在这种情况下……”
“等等!” 我哀怨地叫起来:“你这样年轻貌美,前途似锦,又懂MVC,为什么一定要和一个厨师发生关系呢?”
@#%……×
30分钟后,从地上爬起的新小妹艰难地擦去嘴角的白沫……悲壮:“我知道很多人根本不懂我在做什么,但我知道自己应该做什么!既然我已经闻出这其中的坏味道,我还能有什么选择呢?”
“你知道吗……”新小妹还在继续,悲壮转入悲凉:“有时候,我也想劝自己假装没有看到问题。安慰自己,既然它能工作,就让它保持原样吧……可是,每每如此,我就感觉Bjarne
Strustrup 在慈悲地看着我后背,感觉James Gosling 在冲我轻轻地摇头,感觉Gof们在一起轻轻地叹气……你说我是不是有些疯了?”
“不,我理解你!”我站起来,大声说:“旧小妹用菜价来通知厨师做哪样菜,这是不合适的!菜价者,具体业务数据也;然其所欲,标识菜之唯一耳,此实逻辑数据之职也……”
“你能不能用你擅长的话表达?”,新小妹一脸兴奋。
“好吧。假若有一天,Controller改变了菜价,或者又增加一份同样是10元的菜,那么原来的叫法就会出问题,原来的价钱不再代表原来的菜,或者一份价钱突然对应了多份菜。亦即:在View和Model之间的直接交互的接口,意义开始混乱,双方都必须重新适应……”
我看到新小妹突然不敢看我了:“原来你懂啊……那为什么你刚才要气我……”;她的头低垂着,脸泛上红晕,双手不自然的摆弄垂至双肩的发梢。
“来吧,让我们一起来重构这段代码吧!”,我挺身而出。 她掏出笔,迅速为菜单加上A、B、C的编号:
(A) “小份加菜”-- 7元;
(B) “小份原汤”--10元;
(C) “大份加菜”--12元;
(D) “大份原汤”--15元。
我跳上桌子,将同样的菜单大大地写上墙面,现在看上去,有点像麦当劳的套餐广告。
她走进厨房,听见她在向厨师们约定新的接口用语。
我叫来旧小妹,诚恳地指出她的原来的做法之利弊,然后解释了新的叫菜方法。
她从厨房走出,正式向客户们宣告:从今天开始,点菜可以保留旧的方法:按菜价点菜;但也可以,同时强烈推荐直接用A,B,C,D来点菜。“我们同时支持新旧两种调用方式,但是旧的接口可能在下一版本中不再被支持……”。
一切都变得美好了……我们四目相对,互相偷看了一眼。理解不仅万岁,原来还会产生一些小小的温馨……还有心跳……难道这就是传说的爱情?
手机突然响起,原来是客户着急找我了,我只好和新小妹告别————我一直以为,她至少应该主动和我大大方方的握个手,可是她竟然没有。而我,或许应该主动表达些什么……可是我竟然也没有————也许我们之间的接口也出了些问题?总之,我接到电话,就有些心烦意乱,连饭钱都忘了付就走了;而她一点都没有挽留我————也许她见过吃饭赖帐的人多了吧,我想。
我这一去就是3天。忙,没时间光顾排骨馆。
第4天,我终于来了。但让我惊讶的是,新小妹已经被开除了!我愤怒地揪住老板不放,问他为什么?但他表示无可奉告。还是那位旧小妹有点人情味,趁老板不在时,向我撇撇嘴:“老板嫌她多事!好好的点菜程序一切正常,东改西改的想干什么!”。
我一脸迷茫。旧小妹却又加了一句————这显然是她自己的见解————“还能想干什么!哼,显她能呗!” 我的心更痛了。
后来的日子里,每当我面对一堆代码,开始东改西改:或增加类层次,或剥离类的庞大成员,或重新定义接口……总会有些人在向我撇嘴。我便越发地怀念着新小妹。想起她的那句话“既然我已经闻出这其中的坏味道,我还能有什么选择呢”。也许优秀的程序员总是相似的:要么坚持下去,要么离开。偶尔我还会有冲动,想为自己的爱情重构出一个清晰的接口……可是,我自己也知道,那不过是奢望。因为,当我刚有这个想法,我就仿佛看到,听见Bjarne
Strustrup们、James Gosling们还有Gof们,都在捧着肚皮使劲地笑呢。 |