淺析JAVA面向?qū)ο笏枷?/a>

          對(duì)象,你可以理解成一種具有屬性和行為的實(shí)體,它可向外部提供服務(wù)。而使用這個(gè)對(duì)象,可忽略其內(nèi)部的細(xì)節(jié),只需要知道使用這種服務(wù)時(shí)的“投入”、“產(chǎn)出”即可,因此,“高內(nèi)聚、低耦合”是面向?qū)ο缶幊痰幕舅枷搿?/span>

          略舉一例,平時(shí)我們工作中要?jiǎng)h除某條數(shù)據(jù),一般不是真的delete掉,而是用一個(gè)status標(biāo)識(shí),status-1表示刪除,你寫(xiě)刪除接口時(shí)完全可以這么寫(xiě):

          Class UserService{

                 private UserDao userDao;

                        public void deleteUser(User user){

                               user.setStatus(-1);

                               userDao.update(user);

          }

          }

                 這個(gè)邏輯其實(shí)執(zhí)行的是更新操作,但接口名仍是deleteUser,因?yàn)樗峁┑拇_實(shí)是刪除“服務(wù)”,調(diào)用接口時(shí)我只需要知道我調(diào)用這個(gè)接口時(shí)會(huì)刪除對(duì)象,至于它怎么實(shí)現(xiàn),我管不著。

                 Java中到處是指針引用,習(xí)慣了使用c語(yǔ)言指針的程序員往往會(huì)亂用指針,而破壞了面向?qū)ο蟮乃枷?,比如,我要查?xún)某個(gè)用戶(hù)的密碼,有人可能會(huì)這么寫(xiě):

                 Class UserService{

                        private UserDao userDao;

                               public void queryUserPasswd(int id,User user){

                                      String passwd=userdao.getUserPasswd(id)

          User.setPasswd(passwd);

          }

          }

                 這種寫(xiě)法在語(yǔ)法上沒(méi)什么問(wèn)題,也能得到正確的值,但傳個(gè)user對(duì)象進(jìn)來(lái)就有些不妥了,我要得到密碼,傳個(gè)用戶(hù)的密碼,只要給個(gè)id就可以把密碼返回給調(diào)用者了,干嘛要讓人再傳個(gè)對(duì)象進(jìn)來(lái)?

                 作為一個(gè)項(xiàng)目經(jīng)理,在工作過(guò)程中,確實(shí)會(huì)遇到令人哭笑不得的接口,就像上面那個(gè)刪除接口吧,有人會(huì)這么寫(xiě):

          Class UserService{

                        public void deleteUser(UserDao userDao ,User user){

                               user.setStatus(-1);

                               userDao.update(user);

          }

          }

          這接口寫(xiě)得,讓人摸不著頭腦了,我刪除一個(gè)user對(duì)象,還要傳個(gè)userDao給你,意思是你為我提供服務(wù),我還要給個(gè)工具給你,這說(shuō)不通吧!

          Java是純粹的面向?qū)ο笳Z(yǔ)言,寫(xiě)Java程序時(shí)要時(shí)刻記住,你在為別人提供服務(wù),為別人提供服務(wù)就不應(yīng)該提出過(guò)多的附加要求。這個(gè)問(wèn)題在使用MVC模式分層思想的時(shí)候體現(xiàn)得更加嚴(yán)重。在使用MVC模式開(kāi)發(fā)的時(shí)候,往往將整個(gè)項(xiàng)目分成幾層:action層、service層、數(shù)據(jù)庫(kù)處理層(dao層)等等,每一層往往由不同的程序員編寫(xiě),這時(shí)候要格外提醒自己在為別人提供服務(wù)。在一個(gè)新項(xiàng)目開(kāi)始的時(shí)候往往會(huì)出現(xiàn)一個(gè)問(wèn)題:在增加某條數(shù)據(jù)時(shí),要對(duì)這條數(shù)據(jù)的字段進(jìn)行驗(yàn)證,不能為空或者長(zhǎng)度過(guò)長(zhǎng)等等,如果沒(méi)有驗(yàn)證容易拋錯(cuò),在分層編寫(xiě)接口時(shí),開(kāi)發(fā)人員經(jīng)常想這個(gè)驗(yàn)證應(yīng)該在上層或者下層做吧,我這邊得到的數(shù)據(jù)是正確的,最后導(dǎo)致誰(shuí)都沒(méi)做驗(yàn)證。只要你記住了提供“服務(wù)”的思想,就不應(yīng)該要求別人給你的數(shù)據(jù)是正確的,而是應(yīng)該處理各種非正常問(wèn)題,保證用戶(hù)給你的任何數(shù)據(jù)你都能給出相應(yīng)的返回,當(dāng)然,在實(shí)際的項(xiàng)目中項(xiàng)目經(jīng)理可能規(guī)定數(shù)據(jù)驗(yàn)證在service層做。

          posted on 2012-09-15 11:06 gps夢(mèng)想 閱讀(2052) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): JAVA基礎(chǔ)

          評(píng)論

          # re: 淺析JAVA面向?qū)ο笏枷?a name="Post"> 2013-11-16 16:10 obd2

          “高內(nèi)聚、低耦合”是面向?qū)ο缶幊痰幕舅枷搿?nbsp; 回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2012年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆分類(lèi)

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 融水| 开鲁县| 天全县| 益阳市| 酉阳| 潼关县| 郑州市| 宝兴县| 汪清县| 荆门市| 化隆| 罗甸县| 阿克陶县| 靖远县| 海阳市| 织金县| 庆城县| 漾濞| 文成县| 郁南县| 察雅县| 永寿县| 蒲江县| 河源市| 会宁县| 江油市| 临沂市| 浦东新区| 无棣县| 馆陶县| 合川市| 鹤岗市| 石河子市| 井研县| 密云县| 梅州市| 连南| 合江县| 疏勒县| 正蓝旗| 西林县|