摘要:數(shù)據(jù)庫數(shù)據(jù)表的設(shè)計(jì)的示例代碼實(shí)際上在異步的處理過程中很難做到,這里的類型無法確定,調(diào)用方法也無法做到,需要反射的示例代碼弱類型語言就沒有這樣的麻煩,就能得到原來的實(shí)例對象。
在舊的業(yè)務(wù)流程加入一個(gè)“攔截”,原來從前端表單提交到后臺的處理邏輯延后處理,本質(zhì)上是一個(gè)異步化的處理過程。
此時(shí)將表單參數(shù)存儲(chǔ)到數(shù)據(jù)庫,在適當(dāng)?shù)臅r(shí)刻“攔截”結(jié)束通過時(shí)調(diào)用原來的處理邏輯。
F代表表單參數(shù),A代表控制器參數(shù),
F --> A --> F" --> A";
思考以上的流程,
①F --> A,從前端到controller方法
②A --> F",將參數(shù)存儲(chǔ)到數(shù)據(jù)庫
③F" --> A", 從數(shù)據(jù)庫取出原來的參數(shù)對象,希望A"能夠完全表達(dá)A, A" == A,包括參數(shù)類型與順序。
數(shù)據(jù)庫數(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類型無法確定,調(diào)用realService方法也無法做到,需要反射?
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() {} }
弱類型語言就沒有這樣的麻煩,
$p = unserialize($atForm->data);就能得到原來的Person實(shí)例對象。
后面調(diào)用realService($p)也很自然。雖然這里討論的示例中只有一個(gè)參數(shù),但是多個(gè)參數(shù)的情況下,PHP也能支持。
感謝@Tranch提供的PHP示例代碼
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/28320.html
摘要:數(shù)據(jù)庫數(shù)據(jù)表的設(shè)計(jì)的示例代碼實(shí)際上在異步的處理過程中很難做到,這里的類型無法確定,調(diào)用方法也無法做到,需要反射的示例代碼弱類型語言就沒有這樣的麻煩,就能得到原來的實(shí)例對象。 在舊的業(yè)務(wù)流程加入一個(gè)攔截,原來從前端表單提交到后臺的處理邏輯延后處理,本質(zhì)上是一個(gè)異步化的處理過程。此時(shí)將表單參數(shù)存儲(chǔ)到數(shù)據(jù)庫,在適當(dāng)?shù)臅r(shí)刻攔截結(jié)束通過時(shí)調(diào)用原來的處理邏輯。F代表表單參數(shù),A代表控制器參數(shù), F...
摘要:以下為一段關(guān)于變量的代碼整型變量字符串變量復(fù)數(shù)變量布爾型變量浮點(diǎn)型變量元組列表字典打印出變量的值以及對應(yīng)的類型運(yùn)行結(jié)果為更新至基礎(chǔ) (一)Python概述 python的特點(diǎn) Python是一種面向?qū)ο蟮慕忉屝杂?jì)算機(jī)程序設(shè)計(jì)語言具有豐富且搶答的內(nèi)置庫和第三方庫語法簡潔靈活開源,而且夸平臺,無論在windows、linux、MAC上均可以使用 Python的應(yīng)用 Py...
摘要:然而,中依然有可能發(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)存使用是非常敏感的話題,今天我們來看下如何使用軟引用與弱...
摘要:第一次初始化對象,并且用變量來引用,所以這里的引用計(jì)數(shù)就為。接下來通過創(chuàng)建一個(gè)弱引用,通過打印引用計(jì)數(shù)后,發(fā)現(xiàn)計(jì)數(shù)并沒有改變。由于一次僅能有一個(gè)對象被回收,引用計(jì)數(shù)無法回收循環(huán)引用的對象。所以弱引用很適合處理這種循環(huán)引用的場景。 寫在前邊: 之前的socket系列就告一段落,主要是對自己所學(xué)做一個(gè)總結(jié)與記錄。 接下來我打算基于libevent寫一個(gè)支持并發(fā)的HTTP服務(wù)器。因?yàn)橹皩W(xué)習(xí)...
閱讀 3264·2023-04-25 22:47
閱讀 3776·2021-10-11 10:59
閱讀 2310·2021-09-07 10:12
閱讀 4259·2021-08-11 11:15
閱讀 3439·2019-08-30 13:15
閱讀 1757·2019-08-30 13:00
閱讀 975·2019-08-29 14:02
閱讀 1690·2019-08-26 13:57