<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    零雨其蒙's Blog

    做優(yōu)秀的程序員
    隨筆 - 59, 文章 - 13, 評(píng)論 - 58, 引用 - 0
    數(shù)據(jù)加載中……

    2007年6月6日

    游戲開(kāi)發(fā)入門(mén)

         摘要: 游戲服務(wù)器:SmartFoxServer:smartfoxserver.com簡(jiǎn)單的游戲可以用apache minawebsocket provider:jetty客戶端:可以轉(zhuǎn)換成任何平臺(tái)的開(kāi)發(fā)工具:http://china.unity3d.comHTML5&JS游戲引擎/框架基于HTML5的游戲框架:http://www.cnblogs.com/sc-xx/archive/2011/0...  閱讀全文

    posted @ 2012-06-01 16:08 零雨其蒙 閱讀(1263) | 評(píng)論 (5)編輯 收藏

    Oracle Coherence初啼

         摘要:      昨天寫(xiě)了個(gè)Coherence的小例子,使用了Oracle Enterprise Pack for Eclipse,直接用它創(chuàng)建了一個(gè)ADF項(xiàng)目,連帶創(chuàng)建了JPA項(xiàng)目,在Configuration里添加了Coherence,這樣就有了配套的jar包了。      Coherence利用多播自動(dòng)組成集群,類(lèi)可以不實(shí)現(xiàn)序列化接口,這...  閱讀全文

    posted @ 2012-05-23 16:41 零雨其蒙 閱讀(2093) | 評(píng)論 (0)編輯 收藏

    JVM源碼分析-Java運(yùn)行

         摘要: 最近在看Java并發(fā)編程實(shí)踐和Inside JVM兩本書(shū),發(fā)現(xiàn)如果不真正的了解底層運(yùn)作,那么永遠(yuǎn)是霧里看花。因此從http://openjdk.java.net/groups/hotspot/上下載了源代碼,準(zhǔn)備研究一番。要想完全研究懂我覺(jué)得得對(duì)計(jì)算機(jī)體系結(jié)構(gòu),C,C++編程,Linux內(nèi)核都有比較深入的理解。由于并非從事JVM開(kāi)發(fā)工作,因此不會(huì)研究的那么深入。 入手就從“java ...  閱讀全文

    posted @ 2012-04-26 18:05 零雨其蒙 閱讀(25623) | 評(píng)論 (2)編輯 收藏

    京城七高校,貧嘴大聯(lián)歡

         摘要:   閱讀全文

    posted @ 2009-06-09 11:33 零雨其蒙 閱讀(605) | 評(píng)論 (0)編輯 收藏

    gigix早年間與andyyehoo的論戰(zhàn)

     

    http://www.javaeye.com/topic/8007?page=1

    andyyehoo:

    比較一下下面的兩段代碼,說(shuō)真的,雖然說(shuō)Java效率低一點(diǎn)可以原諒,不過(guò)比較一下這兩段代碼的效率,真是..............雖然java效率比Cn個(gè)等級(jí)大家都接受了,可是不意味著就可以把系統(tǒng)效率丟到爪哇國(guó)去了啊

    第一個(gè)是直接new一個(gè)對(duì)象,接著調(diào)用一個(gè)方法。

    第二個(gè)是首先getApplicationContext,這個(gè)過(guò)程就首先不知道耗費(fèi)多少了。然后是間接的getBean,創(chuàng)建一個(gè)對(duì)象。接著通過(guò)調(diào)用3個(gè)比reflaction更低效率的方法,設(shè)置各個(gè)參數(shù),最后是調(diào)用。

    純粹的比較方法數(shù),已經(jīng)是第一個(gè)的3倍了,更不提每個(gè)方法的效率比第一個(gè)還慢多少。

    當(dāng)然,第二段的靈活性可能是高很多,但是這樣的靈活性真的需要嘛?在大部分系統(tǒng)的大部分區(qū)域,我們需要大量的在EJB,JMS 或者 WEB SERVICE 里面切換嘛?


    我們公司的答案不是,所以這個(gè)也是我們到現(xiàn)在還不普遍使用spring,而是部分使用spring的原因,也是spring的好處。系統(tǒng)小部分的靈活性需要非常高的部分,我們才利用springbeanfactory功能,事務(wù)控制要求嚴(yán)格部分,才使用它的事務(wù)管理功能。但是絕大部分,我們不使用。可以說(shuō)是剛?cè)岵?jì)吧,不靈活的部分是剛,靈活部分是柔,系統(tǒng)如果全部是柔的話,那就軟綿綿無(wú)力了,如果全部是剛的話,那么就太脆而易斷,作為一個(gè)真正實(shí)用的系統(tǒng),剛?cè)徇€是按80/20原則的好。


    引用

    UserManager userManager = new UserManager();

    String userIDRetured = userManager.addUser("John Smith")

    引用

    ServiceRequest bsr = this.getApplicationContext().getBean("businessServiceRequest");

    bsr.setServiceName("User Services");
    bsr.setOperation("addUser");
    bsr.addRequestInput("param1", "addUser");

    String userIDRetured = (String) bsr.service();

    gigix:

    andyyehoo 寫(xiě)道:

    比較一下下面的兩段代碼,說(shuō)真的,雖然說(shuō)Java效率低一點(diǎn)可以原諒,不過(guò)比較一下這兩段代碼的效率,真是..............雖然java效率比C低n個(gè)等級(jí)大家都接受了,可是不意味著就可以把系統(tǒng)效率丟到爪哇國(guó)去了啊

    第一個(gè)是直接new一個(gè)對(duì)象,接著調(diào)用一個(gè)方法。

    第二個(gè)是首先getApplicationContext,這個(gè)過(guò)程就首先不知道耗費(fèi)多少了。然后是間接的getBean,創(chuàng)建一個(gè)對(duì)象。接著通過(guò)調(diào)用3個(gè)比reflaction更低效率的方法,設(shè)置各個(gè)參數(shù),最后是調(diào)用。

    純粹的比較方法數(shù),已經(jīng)是第一個(gè)的3倍了,更不提每個(gè)方法的效率比第一個(gè)還慢多少。

    當(dāng)然,第二段的靈活性可能是高很多,但是這樣的靈活性真的需要嘛?在大部分系統(tǒng)的大部分區(qū)域,我們需要大量的在EJB,JMS 或者 WEB SERVICE 里面切換嘛?


    你講這么大一通,我說(shuō)你純粹扯淡。只要addUser方法里面訪問(wèn)一次數(shù)據(jù)庫(kù),你所有那些性能考量全都是白費(fèi)。哪怕你節(jié)約一萬(wàn)次對(duì)象創(chuàng)建和方法調(diào)用,連接數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)開(kāi)銷(xiāo)就足以讓你的整個(gè)努力化為烏有。你也知道80/20原則,按照80/20原則,J2EE應(yīng)用根本就不應(yīng)該考慮性能問(wèn)題,除非涉及到RPCI/O操作。你在內(nèi)存里優(yōu)化得再好,如果由于架構(gòu)上的原因多一次RPC調(diào)用,整個(gè)系統(tǒng)的性能立馬就掉下來(lái)了。與其追求這種毫無(wú)價(jià)值的、微秒級(jí)的性能提升,我寧可追求全面的靈活性。

    andyyehoo:

    gigix 寫(xiě)道:

    你講這么大一通,我說(shuō)你純粹扯淡。只要addUser方法里面訪問(wèn)一次數(shù)據(jù)庫(kù),你所有那些性能考量全都是白費(fèi)。哪怕你節(jié)約一萬(wàn)次對(duì)象創(chuàng)建和方法調(diào)用,連接數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)開(kāi)銷(xiāo)就足以讓你的整個(gè)努力化為烏有。你也知道80/20原則,按照80/20原則,J2EE應(yīng)用根本就不應(yīng)該考慮性能問(wèn)題,除非涉及到RPCI/O操作。你在內(nèi)存里優(yōu)化得再好,如果由于架構(gòu)上的原因多一次RPC調(diào)用,整個(gè)系統(tǒng)的性能立馬就掉下來(lái)了。與其追求這種毫無(wú)價(jià)值的、微秒級(jí)的性能提升,我寧可追求全面的靈活性。

    addUser調(diào)用數(shù)據(jù)庫(kù)的時(shí)間,大家都是一樣的,為什么我不能考慮這里調(diào)優(yōu)?
    這樣寫(xiě),并不會(huì)多出一次數(shù)據(jù)庫(kù)或者RPC的調(diào)用。除非是很復(fù)雜的部分,那么我會(huì)考慮局部使用。對(duì)于系統(tǒng)80%的代碼,簡(jiǎn)單化處理是不會(huì)帶來(lái)任何問(wèn)題的。


    J2EE應(yīng)用根本就不應(yīng)該考慮性能問(wèn)題?那我所有字符串連接都用+好不好?我做一步catch一次exception好不好?我所有Java方法的調(diào)用都通過(guò)reflection進(jìn)行好不好?根本這個(gè)詞用得太過(guò)了。

    "我寧可追求全面的靈活性",這個(gè)正是問(wèn)題所在,過(guò)分的追求靈活性,將降低效率,我們必須在靈活性和效率中間取得平衡點(diǎn)。xxx說(shuō)了添加多一個(gè)中間層,可以解決大部分的問(wèn)題。中間層越多,當(dāng)然靈活性約好,但是效率是低了。其實(shí)當(dāng)然,效率這個(gè)東西是兩頭大,中間小的一個(gè)東西,最耗費(fèi)時(shí)間的,往往是一開(kāi)始的調(diào)用(用戶點(diǎn)擊傳到處理層)和最后的調(diào)用(調(diào)用數(shù)據(jù)庫(kù),WEB service),但是這并不意味著,我們就可以無(wú)節(jié)制的,忽略中間的效率。

    gigix:

    andyyehoo 寫(xiě)道

    addUser調(diào)用數(shù)據(jù)庫(kù)的時(shí)間,大家都是一樣的,為什么我不能考慮這里調(diào)優(yōu)?
    這樣寫(xiě),并不會(huì)多出一次數(shù)據(jù)庫(kù)或者RPC的調(diào)用。除非是很復(fù)雜的部分,那么我會(huì)考慮局部使用。對(duì)于系統(tǒng)80%的代碼,簡(jiǎn)單化處理是不會(huì)帶來(lái)任何問(wèn)題的。

    你是真不明白呢還是故意抬杠?一次數(shù)據(jù)庫(kù)操作或者RPC的速度是十毫秒級(jí)的,通常一個(gè)J2EE業(yè)務(wù)操作包括幾次網(wǎng)絡(luò)傳輸和幾次數(shù)據(jù)庫(kù)操作,也就是說(shuō)在最理想的情況下一個(gè)業(yè)務(wù)操作的速度是百毫秒級(jí)甚至秒級(jí)的。我請(qǐng)問(wèn)你,你要節(jié)省多少次對(duì)象創(chuàng)建、多少次方法調(diào)用才能把響應(yīng)時(shí)間提升100毫秒?有個(gè)成語(yǔ)可以貼切地形容這種優(yōu)化:杯水車(chē)薪。

    andyyehoo 寫(xiě)道

    J2EE應(yīng)用根本就不應(yīng)該考慮性能問(wèn)題?那我所有字符串連接都用+好不好?我做一步catch一次exception好不好?我所有Java方法的調(diào)用都通過(guò)reflection進(jìn)行好不好?“根本”這個(gè)詞用得太過(guò)了。

    你還真說(shuō)對(duì)了。我所有字符串連接都是用+;我的業(yè)務(wù)對(duì)象外面有動(dòng)態(tài)代理提供的AOP,也就是說(shuō)所有方法調(diào)用都是通過(guò)reflection進(jìn)行的;我的動(dòng)態(tài)代理里面對(duì)異常全部做了包裝,也就是說(shuō)每個(gè)方法調(diào)用都有try...catch...的包裹。我得到的效果是什么?更清晰的代碼,更優(yōu)雅的架構(gòu),以及,更容易找到系統(tǒng)的性能瓶頸,更容易優(yōu)化性能。有些事情也許你沒(méi)有聽(tīng)說(shuō)過(guò),但不代表它不是真的。

    andyyehoo 寫(xiě)道

    "我寧可追求全面的靈活性",這個(gè)正是問(wèn)題所在,過(guò)分的追求靈活性,將降低效率,我們必須在靈活性和效率中間取得平衡點(diǎn)。xxx說(shuō)了“添加多一個(gè)中間層,可以解決大部分的問(wèn)題”。中間層越多,當(dāng)然靈活性約好,但是效率是低了。其實(shí)當(dāng)然,效率這個(gè)東西是兩頭大,中間小的一個(gè)東西,最耗費(fèi)時(shí)間的,往往是一開(kāi)始的調(diào)用(用戶點(diǎn)擊傳到處理層)和最后的調(diào)用(調(diào)用數(shù)據(jù)庫(kù),WEB service),但是這并不意味著,我們就可以無(wú)節(jié)制的,忽略中間的效率。

    同樣一個(gè)問(wèn)題,我換另一個(gè)角度來(lái)問(wèn)你:你要做多少次字符串連接,才能浪費(fèi)100毫秒時(shí)間?你可以自己寫(xiě)個(gè)程序,對(duì)比一下StringBuffer.appendString.+的性能差距,看看需要多大的字符串才能讓你損失100毫秒。如果你能告訴我這個(gè)結(jié)果,我一定很有興趣知道。別忘了,100毫秒僅僅是一次普通J2EE業(yè)務(wù)操作整體響應(yīng)時(shí)間的數(shù)十分之一而已。

    andyyehoo:

    引用:

    你還真說(shuō)對(duì)了。我所有字符串連接都是用+;我的業(yè)務(wù)對(duì)象外面有動(dòng)態(tài)代理提供的AOP,也就是說(shuō)所有方法調(diào)用都是通過(guò)reflection進(jìn)行的;我的動(dòng)態(tài)代理里面對(duì)異常全部做了包裝,也就是說(shuō)每個(gè)方法調(diào)用都有try...catch...的包裹。我得到的效果是什么?更清晰的代碼,更優(yōu)雅的架構(gòu),以及,更容易找到系統(tǒng)的性能瓶頸,更容易優(yōu)化性能。有些事情也許你沒(méi)有聽(tīng)說(shuō)過(guò),但不代表它不是真的。


    lol:
    我相信你的系統(tǒng)是這樣的,但是不代表所有的系統(tǒng)都需要象你這樣。對(duì)于很多中小型系統(tǒng)來(lái)說(shuō),如此優(yōu)雅的架構(gòu)并不都是必須的。

    而且,你這樣對(duì)開(kāi)發(fā)的效率有影響,代碼量又多啦,呵呵,對(duì)開(kāi)發(fā)人員總體素質(zhì)的要求也高了不少,公司的成本又高囖。 這些都是需要考慮的。:evil:

    當(dāng)然,我承認(rèn)后一種方法的先進(jìn)性和靈活性,但是,還是那個(gè)問(wèn)題,不需要拿牛的殺雞,而現(xiàn)在的市場(chǎng),雞還是比牛多一些。

    gigix這也是你的想當(dāng)然。如果采用一個(gè)優(yōu)雅的架構(gòu),普通程序員只需要編寫(xiě)面向?qū)ο蟮某绦蚓妥銐蛄恕K恍枰紤]如何管理事務(wù),他不需要考慮如何記錄日志,他甚至不需要考慮如何獲得和關(guān)閉數(shù)據(jù)庫(kù)連接,而且他寫(xiě)的每個(gè)模塊都可以從系統(tǒng)中摘出來(lái)單獨(dú)測(cè)試。難道開(kāi)發(fā)這樣的程序會(huì)更慢、寫(xiě)更多的代碼、對(duì)開(kāi)發(fā)人員要求更高?相反,如果做太多代碼級(jí)的優(yōu)化,勢(shì)必?fù)p害架構(gòu)的優(yōu)雅和靈活,會(huì)導(dǎo)致更多的重復(fù)代碼,會(huì)使得各個(gè)模塊耦合緊密而不能獨(dú)立測(cè)試,那樣的系統(tǒng)才是代碼量更多、對(duì)開(kāi)發(fā)者要求更高的。

    我只舉一個(gè)最簡(jiǎn)單的例子。你認(rèn)為如果我們需要一個(gè)UserManager,那么就直接new UserManager()好了。但是這樣一來(lái),開(kāi)發(fā)client代碼的人就無(wú)法只測(cè)試他自己的業(yè)務(wù)邏輯,他的單元測(cè)試還必須同時(shí)兼顧UserManager的邏輯。我請(qǐng)問(wèn)你,這是不是比寫(xiě)一個(gè)mock來(lái)測(cè)試自己這一個(gè)模塊有更高的難度?一旦UserManager修改了實(shí)現(xiàn),它的作者必須與所有使用者溝通,以保證這些人的單元測(cè)試不會(huì)失敗,這是不是增加了工作量降低了開(kāi)發(fā)效率?如果client代碼能夠這樣寫(xiě):

    [code:1]
    public class MyClass {
    private UserManager _um;
    public void setUserManager(UserManager um) {
    _um = um;
    }
    public void doSomething() {
    _um.doSomething();
    }
    }
    [/code:1]

    編寫(xiě)client的人不必考慮該創(chuàng)建UserManager的哪個(gè)實(shí)現(xiàn)類(lèi),也不必考慮如何創(chuàng)建,也不必關(guān)心這個(gè)對(duì)象的生命周期,也不用管它是本地對(duì)象還是RPC stub。難道這樣寫(xiě)程序不是更輕松、代碼量更少、對(duì)程序員的要求更低嗎?

    andyyehoo

    gigix寫(xiě)道:

    這也是你的想當(dāng)然。如果采用一個(gè)優(yōu)雅的架構(gòu),普通程序員只需要編寫(xiě)面向?qū)ο蟮某绦蚓妥銐蛄恕K恍枰紤]如何管理事務(wù),他不需要考慮如何記錄日志,他甚至不需要考慮如何獲得和關(guān)閉數(shù)據(jù)庫(kù)連接,而且他寫(xiě)的每個(gè)模塊都可以從系統(tǒng)中摘出來(lái)單獨(dú)測(cè)試。難道開(kāi)發(fā)這樣的程序會(huì)更慢、寫(xiě)更多的代碼、對(duì)開(kāi)發(fā)人員要求更高?相反,如果做太多代碼級(jí)的優(yōu)化,勢(shì)必?fù)p害架構(gòu)的優(yōu)雅和靈活,會(huì)導(dǎo)致更多的重復(fù)代碼,會(huì)使得各個(gè)模塊耦合緊密而不能獨(dú)立測(cè)試,那樣的系統(tǒng)才是代碼量更多、對(duì)開(kāi)發(fā)者要求更高的。

    在正規(guī)公司里面,分工明確的話,都是專(zhuān)人寫(xiě)好架構(gòu),普通程序員按照架構(gòu)往里面填代碼就是的啦。正常情況下,他也是不需要如何管理事務(wù),記錄日志,獲得和關(guān)閉連接,每個(gè)模塊也可以單獨(dú)測(cè)試。

    但是,程序調(diào)試出錯(cuò)的時(shí)候,他們也需要自己查看日志,考慮一下各方各面的因素才能調(diào)試,按照第二種寫(xiě)法,無(wú)疑,這些程序員的素質(zhì)要相對(duì)高一些,考慮的問(wèn)題更多一些,才能進(jìn)行調(diào)試的。

    gigix寫(xiě)道:

    我只舉一個(gè)最簡(jiǎn)單的例子。你認(rèn)為如果我們需要一個(gè)UserManager,那么就直接new UserManager()好了。


    這個(gè)是例子這么寫(xiě)的,需要靈活的部分,我們自然會(huì)用其它方法寫(xiě)。不過(guò)在最簡(jiǎn)單的情況中,我們是會(huì)這么寫(xiě),更簡(jiǎn)單的情況,直接還調(diào)用靜態(tài)方法,不會(huì)不給吧,呵呵

    gigix

    andyyehoo 寫(xiě)道

    這個(gè)是例子這么寫(xiě)的,需要靈活的部分,我們自然會(huì)用其它方法寫(xiě)。不過(guò)在最簡(jiǎn)單的情況中,我們是會(huì)這么寫(xiě),更簡(jiǎn)單的情況,直接還調(diào)用靜態(tài)方法,不會(huì)不給吧,呵呵 :lol:


    別的不多說(shuō),就說(shuō)這一件事好了。我要求所有程序員嚴(yán)格遵循“針對(duì)接口編程”的原則,每個(gè)組件必須提供一個(gè)接口和一個(gè)實(shí)現(xiàn),獲得組件必須以接口的形式、通過(guò)dependency injection獲得。而按照你的說(shuō)法,你要求程序員在提供功能時(shí)有時(shí)針對(duì)接口編程,有時(shí)針對(duì)對(duì)象編程,有時(shí)靜態(tài)方法實(shí)現(xiàn),也就是說(shuō)你要求程序員清楚這三種設(shè)計(jì)的語(yǔ)義區(qū)別和利弊權(quán)衡。我想請(qǐng)問(wèn)你,究竟是誰(shuí)對(duì)程序員的要求更高呢?

    andyyehoo

    引用

    別的不多說(shuō),就說(shuō)這一件事好了。我要求所有程序員嚴(yán)格遵循針對(duì)接口編程的原則,每個(gè)組件必須提供一個(gè)接口和一個(gè)實(shí)現(xiàn),獲得組件必須以接口的形式、通過(guò)dependency injection獲得。

    佩服佩服,沒(méi)有程序員抗議嘛?

    引用

    有時(shí)針對(duì)接口編程,有時(shí)針對(duì)對(duì)象編程,有時(shí)靜態(tài)方法實(shí)現(xiàn),也就是說(shuō)你要求程序員清楚這三種設(shè)計(jì)的語(yǔ)義區(qū)別和利弊權(quán)衡。

    我們現(xiàn)在是這樣,不過(guò),這個(gè)好像是JAVA程序員的基本功吧,雖然現(xiàn)在很多程序員基本功不好,那樣的話,還是我們要求高點(diǎn),按照你那樣寫(xiě)的話,都快可以機(jī)器產(chǎn)生代碼了,呵呵,可以考慮開(kāi)始向自動(dòng)產(chǎn)生代碼發(fā)展了。

    不過(guò)嘛,還是那個(gè)問(wèn)題,出了bug,你們調(diào)試還是比較困難點(diǎn)吧?

    gigix

    andyyehoo 寫(xiě)道

    引用

    別的不多說(shuō),就說(shuō)這一件事好了。我要求所有程序員嚴(yán)格遵循針對(duì)接口編程的原則,每個(gè)組件必須提供一個(gè)接口和一個(gè)實(shí)現(xiàn),獲得組件必須以接口的形式、通過(guò)dependency

    injection獲得。

    佩服佩服,沒(méi)有程序員抗議嘛?

    引用

    有時(shí)針對(duì)接口編程,有時(shí)針對(duì)對(duì)象編程,有時(shí)靜態(tài)方法實(shí)現(xiàn),也就是說(shuō)你要求程序員清楚這三種設(shè)計(jì)的語(yǔ)義區(qū)別和利弊權(quán)衡。

    我們現(xiàn)在是這樣,不過(guò),這個(gè)好像是JAVA程序員的基本功吧,雖然現(xiàn)在很多程序員基本功不好,那樣的話,還是我們要求高點(diǎn),按照你那樣寫(xiě)的話,都快可以機(jī)器產(chǎn)生代碼了,呵呵,可以考慮開(kāi)始向自動(dòng)產(chǎn)生代碼發(fā)展了。

    不過(guò)嘛,還是那個(gè)問(wèn)題,出了bug,你們調(diào)試還是比較困難點(diǎn)吧?



    對(duì)象怎么創(chuàng)建、對(duì)象的生命周期怎么管理,這些都是跟業(yè)務(wù)沒(méi)關(guān)系的infrastructure。讓程序員可以不操心這些infrastructure,一心關(guān)注自己的業(yè)務(wù)邏輯,怎么會(huì)有人抗議?

    你說(shuō)調(diào)試比較困難,我就真的很懷疑你究竟有多少經(jīng)驗(yàn)了。任何一個(gè)有經(jīng)驗(yàn)的J2EE開(kāi)發(fā)者都會(huì)知道,OOD做得越好,debug越輕松。OOD做得好,你才可能做出完備的單元測(cè)試,然后用單元測(cè)試快速鎖定debug的范圍。我們調(diào)試比較困難嗎?我真的不知道該怎么回答這個(gè)問(wèn)題,因?yàn)槲乙呀?jīng)好久沒(méi)開(kāi)過(guò)debugger了。

    andyyehoo

    引用

    你說(shuō)調(diào)試比較困難,我就真的很懷疑你究竟有多少經(jīng)驗(yàn)了。任何一個(gè)有經(jīng)驗(yàn)的J2EE開(kāi)發(fā)者都會(huì)知道,OOD做得越好,debug越輕松。OOD做得好,你才可能做出完備的單元測(cè)試,然后用單元測(cè)試快速鎖定debug的范圍。我們調(diào)試比較困難嗎?我真的不知道該怎么回答這個(gè)問(wèn)題,因?yàn)槲乙呀?jīng)好久沒(méi)開(kāi)過(guò)debugger了。



    所指的bug,是指需要在spring的配置,aop搭建的事務(wù)控制,日志中穿梭尋找的bug,不過(guò)這個(gè)對(duì)于你來(lái)說(shuō)應(yīng)該是很熟了,所以沒(méi)什么感覺(jué)了,一樣快速鎖定了。應(yīng)該就是良好的架構(gòu)使這定位個(gè)過(guò)程很快的。反正有固定步法的話,走7步和走5步差不多吧,呵呵。

    gigix

    andyyehoo 寫(xiě)道

    引用

    你說(shuō)“調(diào)試比較困難”,我就真的很懷疑你究竟有多少經(jīng)驗(yàn)了。任何一個(gè)有經(jīng)驗(yàn)的J2EE開(kāi)發(fā)者都會(huì)知道,OOD做得越好,debug越輕松。OOD做得好,你才可能做出完備的單元測(cè)試,然后用單元測(cè)試快速鎖定debug的范圍。我們調(diào)試比較困難嗎?我真的不知道該怎么回答這個(gè)問(wèn)題,因?yàn)槲乙呀?jīng)好久沒(méi)開(kāi)過(guò)debugger了。

    所指的bug,是指需要在spring的配置,aop搭建的事務(wù)控制,日志中穿梭尋找的bug,不過(guò)這個(gè)對(duì)于你來(lái)說(shuō)應(yīng)該是很熟了,所以沒(méi)什么感覺(jué)了,一樣快速鎖定了。應(yīng)該就是良好的架構(gòu)使這定位個(gè)過(guò)程很快的。反正有固定步法的話,走7步和走5步差不多吧,呵呵。



    這些事情更不需要debug,因?yàn)樗鼈兌荚诿盁煖y(cè)試的范圍內(nèi)。只要一開(kāi)始測(cè)試通過(guò),你做了一件事以后變得不通過(guò)了,馬上就可以知道是你剛才的改動(dòng)造成了破壞。這里沒(méi)有5步、7步的調(diào)試,只有1步:回退你上一分鐘做的修改。

    說(shuō)起來(lái),好象你也開(kāi)始贊成:OOD和良好的架構(gòu)才是真正重要的,而不是20毫秒的性能提升。

    andyyehoo:

    引用

    說(shuō)起來(lái),好象你也開(kāi)始贊成:OOD和良好的架構(gòu)才是真正重要的,而不是20毫秒的性能提升。

    :lol: 我一直的觀點(diǎn)是,OOD和良好的架構(gòu)當(dāng)然很重要的,但是要根據(jù)項(xiàng)目選擇合適靈活的架構(gòu),而不必全部采用最靈活的系統(tǒng),而在這個(gè)基礎(chǔ)上,“20毫秒的性能提升”,也是需要考慮的事情之一,而不可以完全拋之腦后。

    突然想到A計(jì)劃2成龍說(shuō)的,我不能接受任何人,以國(guó)家民族利益的崇高名義,草菅任何無(wú)辜市民的生命。(記不太清,大概)哈哈,有點(diǎn)象

    posted @ 2008-08-04 15:47 零雨其蒙 閱讀(756) | 評(píng)論 (1)編輯 收藏

    統(tǒng)一軟件開(kāi)發(fā)過(guò)程學(xué)習(xí)筆記

    統(tǒng)一軟件開(kāi)發(fā)過(guò)程

     

     UP的幾個(gè)核心概念,也可以說(shuō)是最佳實(shí)踐:用例驅(qū)動(dòng)(所有的分析設(shè)計(jì)測(cè)試都是圍繞用例展開(kāi)),迭代(因此我們會(huì)不斷地編寫(xiě)用例,繪制用例圖,進(jìn)行分析,設(shè)計(jì),實(shí)現(xiàn),部署和測(cè)試活動(dòng)),基于組件(我們看到最后軟件是由組件構(gòu)成的),以架構(gòu)為中心(分層架構(gòu),完整的對(duì)象模型,核心領(lǐng)域模型)

    核心工作流

    模型

    過(guò)程

    UML

    需求

    用例模型

    1 描述企業(yè)的業(yè)務(wù)流程,編寫(xiě)業(yè)務(wù)用例,然后以用例圖來(lái)表示各個(gè)用例之間的關(guān)系(include/extend),及使用(use)該用例的參與者(Actor

    用例圖

    2 使用活動(dòng)圖來(lái)表示業(yè)務(wù)流程

    活動(dòng)圖

    3 根據(jù)業(yè)務(wù)流程,明確系統(tǒng)功能,編寫(xiě)系統(tǒng)用例,使用用例圖表示各個(gè)用例之間的關(guān)系,及使用該用例的參與者。

    用例圖

    4 使用系統(tǒng)順序圖描述系統(tǒng)事件與系統(tǒng)操作

    順序圖

    分析

    分析模型

    描述用例實(shí)現(xiàn)的對(duì)象模型,它是工件:設(shè)計(jì)模型的一個(gè)抽象。 分析模型包含用例分析的結(jié)果、工件:分析類(lèi)的實(shí)例。

     

    用例實(shí)現(xiàn)-分析

    5 對(duì)于用例中的一個(gè)或多個(gè)場(chǎng)景進(jìn)行分析,然后抽象出一些分析類(lèi)(包括邊界類(lèi),控制類(lèi)和實(shí)體類(lèi)),分析類(lèi)將被映射為設(shè)計(jì)類(lèi)(分析類(lèi)代表角色,一個(gè)分析類(lèi)可以由1或多個(gè)設(shè)計(jì)類(lèi)實(shí)現(xiàn))。分析類(lèi)也可以稱(chēng)之為業(yè)務(wù)模型,或者是領(lǐng)域模型。分析類(lèi)通常可跨越多個(gè)用例,其表示領(lǐng)域中的概念。

    類(lèi)圖

    6 分析類(lèi)與分析類(lèi)之間的交互,由協(xié)作圖來(lái)表示。這樣稱(chēng)之為用例實(shí)現(xiàn)。

    協(xié)作圖

    以上兩者再輔之以文本,可以用來(lái)描述用例實(shí)現(xiàn),每個(gè)用例對(duì)應(yīng)于一個(gè)用例實(shí)現(xiàn)[1]

     

    設(shè)計(jì)

    設(shè)計(jì)模型

     

     

    用例實(shí)現(xiàn)-設(shè)計(jì)

    7 設(shè)計(jì)類(lèi)代表系統(tǒng)中完成功能的類(lèi)。它受到分析類(lèi)的啟發(fā)或者是為了解決一些軟件問(wèn)題而被設(shè)計(jì)出來(lái)。

    類(lèi)圖

    8 用例實(shí)現(xiàn)。根據(jù)分析模型中的用例實(shí)現(xiàn),來(lái)完成設(shè)計(jì)模型中的用例實(shí)現(xiàn)。

    順序圖

     可以使用包圖來(lái)表示系統(tǒng)的分層架構(gòu)。

     

    10 某些設(shè)計(jì)對(duì)象是由狀態(tài)決定的,也就是說(shuō)根據(jù)其狀態(tài)的不同,其會(huì)表現(xiàn)出不同的行為。狀態(tài)圖可以表示一個(gè)對(duì)象的狀態(tài)轉(zhuǎn)換關(guān)系及順序,可以理解為對(duì)象狀態(tài)流程圖。

    狀態(tài)圖

    實(shí)現(xiàn)

    實(shí)現(xiàn)模型

    11 將系統(tǒng)抽象為組件,實(shí)現(xiàn)模型即由組件構(gòu)成。這符合UP包含基于組件的思想。(Jacobson是組件開(kāi)發(fā)之父)

    組件圖

    實(shí)施

    實(shí)施模型

    12 實(shí)施模型根據(jù)相互連接的節(jié)點(diǎn)定義實(shí)際的系統(tǒng)架構(gòu)。

    實(shí)施圖

     

     



    [1] [Larman03]RoseRUP模板中都認(rèn)為用例實(shí)現(xiàn)屬于設(shè)計(jì)模型,然而本書(shū)認(rèn)為分析模型和設(shè)計(jì)模型中都存在用例實(shí)現(xiàn),在分析模型中,用例實(shí)現(xiàn)表現(xiàn)為領(lǐng)域?qū)ο笈c領(lǐng)域?qū)ο笾g的交互,設(shè)計(jì)模型中,表現(xiàn)為設(shè)計(jì)類(lèi)與設(shè)計(jì)類(lèi)之間的交互。不過(guò)由于UP是用例驅(qū)動(dòng)開(kāi)發(fā)的,因此,基于用例的分析與設(shè)計(jì),都可以理解為用例實(shí)現(xiàn)。

    posted @ 2008-06-24 00:11 零雨其蒙 閱讀(650) | 評(píng)論 (1)編輯 收藏

    信管人的財(cái)會(huì)筆記(記帳)

         摘要:   賬戶與會(huì)計(jì)科目: 會(huì)計(jì)科目與賬戶是兩個(gè)既有區(qū)別又有聯(lián)系的概念。其共同點(diǎn)在于兩者都按會(huì)計(jì)對(duì)象的內(nèi)容設(shè)置,相同名稱(chēng)的會(huì)計(jì)科目與賬戶反映的經(jīng)濟(jì)內(nèi)容相同。兩者的區(qū)別在于,會(huì)計(jì)科目只是一個(gè)名稱(chēng),只表明某類(lèi)經(jīng)濟(jì)內(nèi)容,而賬戶既有名稱(chēng)又有結(jié)構(gòu),可以記錄和反映某類(lèi)經(jīng)濟(jì)內(nèi)容的增減變動(dòng)及其結(jié)果。在實(shí)際工作中,會(huì)計(jì)人員往往不加區(qū)別地把會(huì)計(jì)科目與賬戶作為同義語(yǔ)。 賬戶結(jié)構(gòu)如下: 賬戶名稱(chēng)(會(huì)計(jì)科目) ...  閱讀全文

    posted @ 2008-06-06 14:28 零雨其蒙 閱讀(998) | 評(píng)論 (0)編輯 收藏

    項(xiàng)目組內(nèi)部推薦書(shū)目

         摘要: 本文介紹理解本項(xiàng)目所有架構(gòu)、設(shè)計(jì)思想和具體技術(shù)、工具使用的著作,閱讀以下著作,可以更好的理解我們的項(xiàng)目為何如此架構(gòu),為什么要使用這些工具,以及過(guò)去在項(xiàng)目中出現(xiàn)的文檔中所簡(jiǎn)單描述的內(nèi)容的背后原理是什么。

      閱讀全文

    posted @ 2008-02-14 15:27 零雨其蒙 閱讀(834) | 評(píng)論 (0)編輯 收藏

    企業(yè)應(yīng)用架構(gòu)模式學(xué)習(xí)筆記(2)

         摘要: 這一部分完成了對(duì)于該書(shū)第一部分的學(xué)習(xí),并且學(xué)習(xí)了領(lǐng)域?qū)幽J剑貏e是領(lǐng)域模型模式,并對(duì)于數(shù)據(jù)層的活動(dòng)記錄進(jìn)行了研究  閱讀全文

    posted @ 2008-02-01 23:47 零雨其蒙 閱讀(683) | 評(píng)論 (0)編輯 收藏

    企業(yè)應(yīng)用架構(gòu)模式學(xué)習(xí)筆記(1)

         摘要: Martin Fowler的《企業(yè)應(yīng)用架構(gòu)模式》,很經(jīng)典,這一部分的筆記主要對(duì)應(yīng)于書(shū)中第一章和第二章的部分內(nèi)容,對(duì)于領(lǐng)域邏輯層進(jìn)行了部分人討論,對(duì)領(lǐng)域模型與事務(wù)腳本模式做了簡(jiǎn)要分析。還包括對(duì)于對(duì)象到數(shù)據(jù)庫(kù)映射的簡(jiǎn)單討論,與現(xiàn)實(shí)使用的DAO模式和Hiberante進(jìn)行了概念映射  閱讀全文

    posted @ 2008-01-27 23:54 零雨其蒙 閱讀(450) | 評(píng)論 (0)編輯 收藏

    如何判斷對(duì)方是否喜歡自己的信息經(jīng)濟(jì)學(xué)解釋

         摘要: 本文旨在利用信息經(jīng)濟(jì)學(xué)的知識(shí)解決我們?cè)趹賽?ài)之前的階段中需要決策問(wèn)題:如何判斷對(duì)方是否喜歡自己?
      閱讀全文

    posted @ 2007-12-11 00:17 零雨其蒙 閱讀(2494) | 評(píng)論 (2)編輯 收藏

    8月6日到9月15日項(xiàng)目小結(jié)(一)

         摘要: 8月6日到9月15日項(xiàng)目小結(jié),第一部分主要回顧了在過(guò)去的一個(gè)多月里我們都做了什么~  閱讀全文

    posted @ 2007-09-18 01:24 零雨其蒙 閱讀(783) | 評(píng)論 (3)編輯 收藏

    項(xiàng)目隨想錄

            發(fā)現(xiàn)自己不怎么會(huì)起題目了。中午回去還沒(méi)走到寢室,就接到劉老師的電話,說(shuō)要把程序調(diào)通,于是中午吃完飯立馬跑回去,把顯示問(wèn)題解決了。其實(shí)那個(gè)無(wú)效數(shù)字問(wèn)題是因?yàn)樵贖QL語(yǔ)句中使用了cast(pw as integer),將字符串轉(zhuǎn)成Integer型,可是數(shù)據(jù)庫(kù)中的內(nèi)容編程了字母加數(shù)字,自然會(huì)轉(zhuǎn)換失敗了,唉,真不理解隨便改什么業(yè)務(wù)主鍵啊。

       下午上企業(yè)資源規(guī)劃,我的名字成了所有老師舉的例子的主角,三個(gè)小時(shí),我的名字被提及至少50次,每隔2分鐘就要提一次,后來(lái)我都聽(tīng)麻木了,不知道自己叫什么了。

       老師主要講了4方面的內(nèi)容:1、信息管理專(zhuān)業(yè)的知識(shí)架構(gòu)(技術(shù)基礎(chǔ)層,技術(shù)應(yīng)用層(ms是這個(gè)吧),管理應(yīng)用層)、應(yīng)用與研究的關(guān)系,2、信息技術(shù)緣何發(fā)展3、流行的信息系統(tǒng)概念(ERP,MIS,EC,EAI,BPR,SCM)4、還有啥來(lái)著?記不住了,老師還讓總結(jié)筆記呢,唉,明天問(wèn)別人吧。

        晚上和球去跑步了,本來(lái)感覺(jué)自己挺疲乏的,可是跑步過(guò)程感覺(jué)疲乏一點(diǎn)點(diǎn)消退,跑完后感覺(jué)有點(diǎn)暈,看來(lái)還是感冒有點(diǎn)虛,再加之沒(méi)睡好覺(jué),運(yùn)動(dòng)量有點(diǎn)大,于是買(mǎi)了盒奶,和果汁,坐著和球聊了好久,又去吃了串,回來(lái)洗了澡,別提有多爽了,感覺(jué)人也有精神了,我覺(jué)得鍛煉什么太重要了,運(yùn)動(dòng)就應(yīng)該像吃飯睡覺(jué)一樣不可或缺,一樣重要,減肥其次,增強(qiáng)體魄才是最重要的。

     

        我需要花費(fèi)一定時(shí)間好好總結(jié)一下從8月13號(hào)到9月15號(hào),這一個(gè)月時(shí)間項(xiàng)目總結(jié),仔細(xì)分析一下經(jīng)驗(yàn)和教訓(xùn),我們得到了什么,驗(yàn)證了什么,出了什么問(wèn)題,癥結(jié)究竟是什么,要分得很清楚很細(xì)致,這樣才行。我是覺(jué)得收獲很大,不過(guò)想想以后的項(xiàng)目開(kāi)發(fā)感覺(jué)有些絕望,使用現(xiàn)在的開(kāi)發(fā)方式實(shí)在是太痛苦了,我今天想了想我們的系統(tǒng)經(jīng)常做的用戶交互就是在一個(gè)ComboBox中選擇了某個(gè)選項(xiàng),其他若干個(gè)Text或ComboBox框中的內(nèi)容要隨之變化,使用我們現(xiàn)在的方法,實(shí)現(xiàn)這個(gè)東西要?jiǎng)佑煤枚啻a,而且其方式就好比在Delphi中隨意拖拽Query一樣有害。并且遭遇到復(fù)雜的頁(yè)面流程又該怎么辦,如何測(cè)試,莫非只能使用alert?看來(lái)我們的系統(tǒng)好像并不適合B/S模式,其實(shí)從垂直切片的角度來(lái)說(shuō),我們的驗(yàn)證工作做得很成功,可是從老板的角度來(lái)考慮,或許我們就是失敗的了,因?yàn)槲覀儧](méi)有做出一個(gè)足夠豐富的原型。

        要學(xué)的東西很多,明天去復(fù)習(xí)運(yùn)籌,晚上寫(xiě)總結(jié)報(bào)告,周一老板他們估計(jì)就回來(lái)了吧

    posted @ 2007-09-16 00:12 零雨其蒙 閱讀(262) | 評(píng)論 (0)編輯 收藏

    又看到希望了

        昨天還在困擾Hibernate的復(fù)雜,今天看了一上午Spring,把HibernateTemplate,HibernateDaoSupport兩個(gè)類(lèi)的源代碼看了一下,發(fā)現(xiàn)Spring絕對(duì)是大大簡(jiǎn)化我們的開(kāi)發(fā),降低我們學(xué)習(xí)Hibernate的門(mén)檻。Hibernate中的許多寫(xiě)法,Spring把它們統(tǒng)一和簡(jiǎn)化了。下午跟老邢分了分工,我負(fù)責(zé)看關(guān)聯(lián)和映射,他負(fù)責(zé)看CRUD,再加上Spring的簡(jiǎn)化,我想起碼我們現(xiàn)在上路還不算太危險(xiǎn)。

        表現(xiàn)層在用Ext,一個(gè)新的Ajax庫(kù),資源非常之少,和DWR沒(méi)法比;不過(guò)它的豐富程度遠(yuǎn)遠(yuǎn)超越了Ajax JSP Tags。剛才剛和老大一起完成一個(gè)實(shí)驗(yàn),我們終于可以取到某一行記錄的內(nèi)容了!花費(fèi)了一個(gè)多小時(shí)的時(shí)間。 

        如今Struts似乎只是用一個(gè)Action了,標(biāo)簽和Form Bean沒(méi)必要用了,Ext代替了,其實(shí)覺(jué)得還不如用Spring MVC好了。多引進(jìn)一個(gè)框架,無(wú)端增加了復(fù)雜性,又需要多學(xué)一種技術(shù)。不過(guò)Struts的Validate還是需要進(jìn)一步研究的,不過(guò)它的優(yōu)先級(jí)可以推后一些。

     

         似乎又看到一些希望了,使用Ext我們實(shí)現(xiàn)了取一條記錄的內(nèi)容,那么接下來(lái)對(duì)這條記錄進(jìn)行修改和刪除就沒(méi)問(wèn)題了。接下來(lái),在頁(yè)面上利用div彈出一個(gè)添加/修改的頁(yè)面還需要研究,之后就是“冒泡”。

        某些工作還比較無(wú)序,比如使用MyEclipse生成的POJO,DAO和部署文件總是需要重構(gòu),移動(dòng)位置,修改名字等,不過(guò)這個(gè)也可以放在稍后研究。

     

         明天開(kāi)會(huì)希望能給老師們演示一些基本功能,畢竟我們也做了有近20天了,按照XP來(lái)說(shuō),2周算是一個(gè)迭代過(guò)程,那么也該展示一些東西了。

         明晚SHE演唱會(huì),希望下午的會(huì)不要開(kāi)太久,那個(gè)地方真的是好遠(yuǎn)啊~

     

    posted @ 2007-08-31 18:42 零雨其蒙 閱讀(247) | 評(píng)論 (0)編輯 收藏

    J2EE持久化策略考察——為項(xiàng)目做技術(shù)選型準(zhǔn)備的一點(diǎn)資料

         摘要: 為了項(xiàng)目技術(shù)選型,最近一直在對(duì)比各種技術(shù),這一部分是對(duì)于使用O/R映射原因的考察,EJB和Hibernate的抉擇,因?yàn)樽约簺](méi)在項(xiàng)目中用過(guò)EJB(就是那時(shí)候去軟件學(xué)院蹭過(guò)課),因此基本上都是聽(tīng)Rod Johnson的話,不過(guò)覺(jué)得他的言論非常有道理  閱讀全文

    posted @ 2007-08-25 20:33 零雨其蒙 閱讀(426) | 評(píng)論 (0)編輯 收藏

    終于……

     剛開(kāi)完會(huì),不知道心情是怎樣的,是壓力抑或動(dòng)力,其實(shí)大多數(shù)時(shí)候開(kāi)完會(huì)的感覺(jué)就是不想干活……

        終于暫時(shí)把做“垂直切片”的工具和環(huán)境定下來(lái)了,早上來(lái)的時(shí)候還在查JBoss,因?yàn)閯⒗蠋熡痔嵋娴拈_(kāi)源策略。其實(shí)問(wèn)題就在于他們總是認(rèn)為SSH與特定服務(wù)器之間存在某種特殊的淵源,一定要加以組合方顯專(zhuān)業(yè),不過(guò),甭管是EJB還是Hibernate,Weblogic還是JBoss,AIX還是Windows對(duì)于我們來(lái)說(shuō)都差不多,關(guān)鍵是先定下來(lái)一個(gè)讓我們把這個(gè)Demo做出來(lái)就好。

        老板說(shuō)要一周搞定,我覺(jué)得簡(jiǎn)直是天方夜譚,而且還把我的搭檔派去廣州了,以后我就要孤獨(dú)的開(kāi)發(fā)了~

     

        不知道心里什么感覺(jué),不過(guò),終于可以知道確定要學(xué)什么了,老板還說(shuō)Demo做完后再評(píng)估,可能會(huì)換技術(shù)框架,也好,研究生畢業(yè)時(shí),收獲也將滿滿的了~

    posted @ 2007-08-25 17:46 零雨其蒙 閱讀(219) | 評(píng)論 (0)編輯 收藏

    唉,程序員要是自學(xué)能力不行就等死吧!

         摘要: 唉,程序員要是自學(xué)能力不行就等死吧!最近的生活就是這樣的,每天都在學(xué)習(xí)新技術(shù)~項(xiàng)目需要  閱讀全文

    posted @ 2007-08-24 19:07 零雨其蒙 閱讀(641) | 評(píng)論 (0)編輯 收藏

    Struts2.0,超屌

       今天看了一篇叫《myeclipse和struts2+spring+hibernate混合編程》的文章,作者應(yīng)該是CSDN上某位大蝦,不過(guò)it168沒(méi)有道德,轉(zhuǎn)載也不留鏈接。

       目前項(xiàng)目是用Struts1.2+Spring2.0+Hibernate3.0,原來(lái)還覺(jué)得Struts1.2剛用上怎么又升級(jí)成2.0了,而且還是和WebWork2.3整合的,不知道學(xué)習(xí)曲線如何,可是今天看了這個(gè)例子,覺(jué)得無(wú)論是Action類(lèi),配置文件,還是標(biāo)簽都相當(dāng)簡(jiǎn)潔,十分富有表現(xiàn)力,直接看代碼就明白是怎么回事了~

       用MyEclipse自動(dòng)生成Hibernate的POJO總是生出很惡的代碼,不知道哪里出了問(wèn)題,明天繼續(xù)鉆研吧~

      

    posted @ 2007-08-21 00:30 零雨其蒙 閱讀(382) | 評(píng)論 (0)編輯 收藏

    不能說(shuō)的秘密 終極解密

         摘要: 周杰倫最新自編自導(dǎo)自演自唱的電影《不能說(shuō)的秘密》,完全解密,強(qiáng)力推薦~~  閱讀全文

    posted @ 2007-08-09 17:35 零雨其蒙 閱讀(2317) | 評(píng)論 (8)編輯 收藏

    瀑布模型與結(jié)構(gòu)化方法

         摘要: 瀑布模型之父在那篇號(hào)稱(chēng)孕育了瀑布方法的文章里竟然支持的是迭代方法,而瀑布方法實(shí)際上是文中的反例!而結(jié)構(gòu)化方法之父又創(chuàng)立面向?qū)ο蠓椒ā=裉彀l(fā)現(xiàn)了這些,萬(wàn)分驚奇!  閱讀全文

    posted @ 2007-06-06 20:06 零雨其蒙 閱讀(2839) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 免费A级毛片无码视频| aaa毛片免费观看| 搜日本一区二区三区免费高清视频| 牛牛在线精品观看免费正| 岛国岛国免费V片在线观看| 日韩免费人妻AV无码专区蜜桃| 99爱在线精品免费观看| 波多野结衣久久高清免费| 亚洲国产一区二区三区| 国产亚洲av片在线观看播放| 亚洲福利视频网址| 337p日本欧洲亚洲大胆人人| 黄色视频在线免费观看| 日本免费xxxx色视频| 国产黄色片在线免费观看| 国产精品亚洲成在人线| 91丁香亚洲综合社区| 人妻18毛片a级毛片免费看| 免费人成在线观看网站品爱网| 女人18一级毛片免费观看| 久久国产成人亚洲精品影院| 亚洲综合久久久久久中文字幕| 日韩国产精品亚洲а∨天堂免| 中文字幕视频在线免费观看| 久久久www成人免费毛片| 中文字幕亚洲不卡在线亚瑟| 亚洲网站免费观看| 日韩毛片免费一二三| xxxx日本免费| 国产亚洲精品自在线观看| 亚洲精品福利你懂| 99免费在线视频| 麻豆精品国产免费观看| 亚洲av日韩av无码黑人| 亚洲成av人无码亚洲成av人| 99爱在线观看免费完整版 | 国产中文字幕在线免费观看 | 222www在线观看免费| 高清在线亚洲精品国产二区| 亚洲视频在线观看视频| 亚洲AV无码成H人在线观看|