Javadream

          A long way and a dream.

          面向?qū)ο筮€是面向過(guò)程?

          Posted on 2006-07-15 08:57 oxl 閱讀(230) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 生活之途 、技術(shù)感語(yǔ)

          如果有用java開(kāi)發(fā)Web的人都會(huì)或多或少地懷疑自己是否真的用到了面向?qū)ο蟮睦碚摵头椒?又或者認(rèn)為這是理所當(dāng)然的方式.呵...多想了吧?
          為什么我會(huì)有這樣的感受?因?yàn)槲乙荒甓鄟?lái)都在想這個(gè)問(wèn)題.

          看看下面的代碼,PHP的:

          function createPerson($name, $sex, $age) {
          ?$db = getDbConnection();?//get db *cache*
          ?$db->query("insert into person values(NULL, '$name', '$sex', '$age')");
          ?return $db->lastStatus();
          }

          這是純過(guò)程的一段程序,只要在其它程序文件中這樣調(diào)用:
          if (createPerson("juggler", "man", 25)) {
          ?echo "done.";
          } else {
          ?echo "error.";
          }

          學(xué)過(guò)C語(yǔ)言的人會(huì)很容易接受上面的程序,也很自然,這無(wú)非是和我們生活過(guò)程一樣,一個(gè)一個(gè)步驟執(zhí)行.

          那么Java呢?看看下面的代碼:

          //Person.java
          //a pojo class
          package org.oxl.domain;

          public class Person {
          ?public Person() {}
          ?public setName(String name){//....此處省略}
          ?public getName() {//....此處省略}

          ?//...getter and setter
          }

          //PersonDao
          package org.oxl.dao.implements;

          public class PersonDao implements Daobase {
          ?public create(Person member) {
          ??String name = member.getName();
          ??String sex = member.getSex();
          ??String age = member.getAge();

          ??//use jdbc to save it
          ??//or you can use hibernate or use ibatis..
          ?}
          }

          上面是我見(jiàn)到的最常用的java代碼,失血模型,所有的邏輯都在Dao層和Service層搞定,分工合理,只是總覺(jué)得不夠OO,可的確這是最快的開(kāi)發(fā)方式.
          其實(shí)有一個(gè)Person類(lèi)就是面向?qū)ο笏枷氲捏w現(xiàn),把世界分為一個(gè)又一個(gè)的實(shí)體,歸類(lèi),然后統(tǒng)一他們的動(dòng)作,而動(dòng)作的差異由他們自身的數(shù)據(jù)而定.可是我們?cè)僮屑?xì)看PersonDao的create方法,他的動(dòng)作是把member扁平化,然后再用jdbc保存,又或者不扁平化,直接用一些ORM或者SQL map工具(其實(shí)也是扁平化的過(guò)程,只是我們看不到而已),其實(shí)和前面所說(shuō)的那段代碼是沒(méi)有區(qū)別的,都是面向過(guò)程的方式,雖然這個(gè)表面上套了一層OO的皮.

          可能會(huì)有人說(shuō):"其實(shí)我是把一些保存數(shù)據(jù)的邏輯動(dòng)作挑出來(lái),合成一個(gè)邏輯對(duì)象,由它專管域?qū)ο蟮倪壿嫼统志没?"是的,我承認(rèn)這句話的正確性,可是這樣的話,域?qū)ο缶椭皇O聅etter和getter了,那他就只是一個(gè)值對(duì)象了,他失去了他應(yīng)有的權(quán)利,那么域?qū)ο筮€有實(shí)在的意義嗎?這或許就是什么PO,VO存在的必要吧.

          不想了,這樣的問(wèn)題永遠(yuǎn)沒(méi)有結(jié)果,也沒(méi)有統(tǒng)一的模式.其實(shí)失血模型也挺適合我們這些PHP轉(zhuǎn)JAVA的人,中小型的項(xiàng)目已經(jīng)足夠用了.

          ---

          一大早給老媽子吵醒,沒(méi)法睡了.出來(lái)打點(diǎn)東西,又要嘮嘮叨叨,算了,不打了.

          今天回一趟學(xué)校,看有沒(méi)有插本的信息,看來(lái)還得繼續(xù)考試(-_-,我不喜歡考試).

          主站蜘蛛池模板: 永嘉县| 中卫市| 鄂尔多斯市| 陆丰市| 郸城县| 平罗县| 连城县| 弥勒县| 邮箱| 五原县| 苗栗市| 闸北区| 阿拉善左旗| 德安县| 洮南市| 辽阳市| 昭苏县| 安仁县| 海伦市| 烟台市| 湾仔区| 颍上县| 马关县| 滨海县| 乌鲁木齐县| 应城市| 塔城市| 峡江县| 东方市| 怀来县| 山东省| 垫江县| 突泉县| 兴安盟| 平阴县| 温州市| 饶阳县| 锦州市| 吉林省| 阿图什市| 民和|