成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

強(qiáng)類型與弱類型語(yǔ)言關(guān)于存取對(duì)象(數(shù)據(jù))的問題

lingdududu / 1785人閱讀

摘要:數(shù)據(jù)庫(kù)數(shù)據(jù)表的設(shè)計(jì)的示例代碼實(shí)際上在異步的處理過程中很難做到,這里的類型無(wú)法確定,調(diào)用方法也無(wú)法做到,需要反射的示例代碼弱類型語(yǔ)言就沒有這樣的麻煩,就能得到原來(lái)的實(shí)例對(duì)象。

在舊的業(yè)務(wù)流程加入一個(gè)“攔截”,原來(lái)從前端表單提交到后臺(tái)的處理邏輯延后處理,本質(zhì)上是一個(gè)異步化的處理過程。
此時(shí)將表單參數(shù)存儲(chǔ)到數(shù)據(jù)庫(kù),在適當(dāng)?shù)臅r(shí)刻“攔截”結(jié)束通過時(shí)調(diào)用原來(lái)的處理邏輯。
F代表表單參數(shù),A代表控制器參數(shù),

F --> A --> F" --> A";

思考以上的流程,
①F --> A,從前端到controller方法
②A --> F",將參數(shù)存儲(chǔ)到數(shù)據(jù)庫(kù)
③F" --> A", 從數(shù)據(jù)庫(kù)取出原來(lái)的參數(shù)對(duì)象,希望A"能夠完全表達(dá)A, A" == A,包括參數(shù)類型與順序。

數(shù)據(jù)庫(kù)數(shù)據(jù)表的設(shè)計(jì)

table at_form{
 id bigint,
 name varchar
 json  varchar
 type_token varchar?
}

Java的示例代碼

public class AtFormApp {
        
        public static void main(String[] args) throws IOException, ClassNotFoundException {
                Person p = new Person();
                p.name = "Honey";
                p.age = 26;
                
                controlMethod1(p);
                controlMethod2();
                
                
        }
        
        static class Person {
                
                String name;
                int age;
        }
        static void controlMethod1(Person p) throws IOException {
                saveService(p, "p");
        }
        static void controlMethod2() throws IOException, ClassNotFoundException {
                AtForm atForm = query();
                ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(atForm.typeToken.getBytes()));
                Type type = (Type) ois.readObject();
                
                //Person type here
                Person p = new Gson().fromJson(atForm.json, type.getClass()); 
                
                realService(p);
        }
        static void saveService(Person p, String name) throws IOException {
                Type type = new TypeToken() {}.getType();
                String json = new Gson().toJson(p);
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ObjectOutputStream oos = new ObjectOutputStream(baos);
                oos.writeObject(type);
                oos.close();
                String typeToken = baos.toString();
                
                
                AtForm atForm = new AtForm();
                atForm.name = name;
                atForm.json = json;
                atForm.typeToken = typeToken;
                
                insert(atForm);
        }
        static void realService(Person p) {
                //good
        }
        
        static AtForm query() throws IOException {
                AtForm atForm = new AtForm();
                atForm.name = "p";
                atForm.json = "{"name":"Honey","age":26}";
                Type type = new TypeToken() {}.getType();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                ObjectOutputStream oos = new ObjectOutputStream(baos);
                oos.writeObject(type);
                oos.close();
                String typeToken = baos.toString();
                atForm.typeToken = typeToken;
                return atForm;
        }
        //imitate insert behavior
        static int insert(AtForm atForm) {
                return 1;
        }
        
        static class AtForm {
                Long id;
                String typeToken;
                String name;
                String json;
                
                
        }
}

實(shí)際上在異步的處理過程中很難做到,


這里的Person類型無(wú)法確定,調(diào)用realService方法也無(wú)法做到,需要反射?
PHP的示例代碼

name = "Honey";
        $p->age = 26;

        $this->controlMethod1($p);
        $this->controlMethod2();
    }

    public function controlMethod1(Person $p) {
        $this->saveService($p, "p");
    }

    public function controlMethod2() {
        $atForm = AtForm::findOne(["name" => "p"]);
        $p = unserialize($atForm->data);

        $this->realService($p);
    }

    public function saveService(Person $p, $name) {
        $atForm = new AtForm();
        $atForm->name = $name;
        $atForm->data = serialize($p);
        $atForm.save();
    }


    public function realService(Person $p) {
        // good
    }
}

class Person {
    public $name;
    public $age;
}

class AtForm() {
    public $id;
    public $name;
    public $data;

    public static findOne($condition) {}
    public save() {}
}

弱類型語(yǔ)言就沒有這樣的麻煩,
$p = unserialize($atForm->data);就能得到原來(lái)的Person實(shí)例對(duì)象。
后面調(diào)用realService($p)也很自然。雖然這里討論的示例中只有一個(gè)參數(shù),但是多個(gè)參數(shù)的情況下,PHP也能支持。

感謝@Tranch提供的PHP示例代碼

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68644.html

相關(guān)文章

  • 強(qiáng)類型與弱類型語(yǔ)言關(guān)于存取對(duì)象數(shù)據(jù)問題

    摘要:數(shù)據(jù)庫(kù)數(shù)據(jù)表的設(shè)計(jì)的示例代碼實(shí)際上在異步的處理過程中很難做到,這里的類型無(wú)法確定,調(diào)用方法也無(wú)法做到,需要反射的示例代碼弱類型語(yǔ)言就沒有這樣的麻煩,就能得到原來(lái)的實(shí)例對(duì)象。 在舊的業(yè)務(wù)流程加入一個(gè)攔截,原來(lái)從前端表單提交到后臺(tái)的處理邏輯延后處理,本質(zhì)上是一個(gè)異步化的處理過程。此時(shí)將表單參數(shù)存儲(chǔ)到數(shù)據(jù)庫(kù),在適當(dāng)?shù)臅r(shí)刻攔截結(jié)束通過時(shí)調(diào)用原來(lái)的處理邏輯。F代表表單參數(shù),A代表控制器參數(shù), F...

    wenshi11019 評(píng)論0 收藏0
  • Python3基礎(chǔ)

    摘要:以下為一段關(guān)于變量的代碼整型變量字符串變量復(fù)數(shù)變量布爾型變量浮點(diǎn)型變量元組列表字典打印出變量的值以及對(duì)應(yīng)的類型運(yùn)行結(jié)果為更新至基礎(chǔ) (一)Python概述 python的特點(diǎn) Python是一種面向?qū)ο蟮慕忉屝杂?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言具有豐富且搶答的內(nèi)置庫(kù)和第三方庫(kù)語(yǔ)法簡(jiǎn)潔靈活開源,而且夸平臺(tái),無(wú)論在windows、linux、MAC上均可以使用 Python的應(yīng)用 Py...

    sPeng 評(píng)論0 收藏0
  • 內(nèi)存 問題- 收藏集 - 掘金

    摘要:然而,中依然有可能發(fā)生內(nèi)存泄漏。所以你的安卓快速定位解決內(nèi)存泄漏掘金昨天是個(gè)好日子,程序員的節(jié)日,在這里給所有的程序員送上一份遲到的祝福。應(yīng)用內(nèi)存泄漏的定位分析與解決策略掘金,大家好,我是。 Android 性能優(yōu)化之巧用軟引用與弱引用優(yōu)化內(nèi)存使用 - Android - 掘金前言: 從事Android開發(fā)的同學(xué)都知道移動(dòng)設(shè)備的內(nèi)存使用是非常敏感的話題,今天我們來(lái)看下如何使用軟引用與弱...

    TIGERB 評(píng)論0 收藏0
  • Python基礎(chǔ)系列:初識(shí)python引用計(jì)數(shù)與弱引用

    摘要:第一次初始化對(duì)象,并且用變量來(lái)引用,所以這里的引用計(jì)數(shù)就為。接下來(lái)通過創(chuàng)建一個(gè)弱引用,通過打印引用計(jì)數(shù)后,發(fā)現(xiàn)計(jì)數(shù)并沒有改變。由于一次僅能有一個(gè)對(duì)象被回收,引用計(jì)數(shù)無(wú)法回收循環(huán)引用的對(duì)象。所以弱引用很適合處理這種循環(huán)引用的場(chǎng)景。 寫在前邊: 之前的socket系列就告一段落,主要是對(duì)自己所學(xué)做一個(gè)總結(jié)與記錄。 接下來(lái)我打算基于libevent寫一個(gè)支持并發(fā)的HTTP服務(wù)器。因?yàn)橹皩W(xué)習(xí)...

    robin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<