數據后台與前端展現


一.問題

現在很多web服務,都是前端展現與后端數據放在不同的內部服務器上。其結構為

 

 

1.那些數據可以在html,js中存在

  a.為了安全性,避免隱私數據存在

  b.如果僅僅為了保存一些數據,然后在互動的時候使用,該不該存在?如果不保存這個數據,那么必須到后台去取。

2.那些數據可以在業務邏輯,即前端網站的后台存在?

那些數據會需要暫存到前端的后台嗎?

  我覺得一些不會更改的,數據字典類型的數據可以暫存到前端,應該這個數據是基本永遠不會變的,而僅僅對數據起到解釋的作用,

    a.比如數據表中的字段在界面應該顯示為什么名字等等,

    b.有多少個類型的對象,對象可以變,對象類型不會變

    c.或者使用memcache,讓它自動的優化那些該臨時存放。

  這些數據通用(使用次數多),不變,不易展示於html與js里面(能被瀏覽器直接看到),所以放到前端站點的后台。

3.數據服務的數據是什么

  一般是基於數據庫提供json的數據傳輸。

二.標准化做法

1.前台的數據表格:

  a.采用bootstrap-table,查詢為form的ajax查詢的刷新數據。服務端分頁(加載數據量為一個頁面的數據,翻頁要請求后台),

  b.表格的標題顯示:表格標題就直接寫在html中,寫在后台沒有必要,這個是很難標准化的。

  c.表格內容顯示:這個涉及數據字典,查詢出來的是數據庫里面的數據,有時候需要將里面的數據轉化一下,比如某個狀態的英文字轉為中文表示。轉化如果發生的在后台,就需要對查詢列表再次遍歷,然后轉化,增加了后台工作量;發生在前台,則計算壓力在js。(django里面有語言translate模塊,這里假設這種狀態轉化不能通過django里面翻譯模塊實現。因為同樣字符串在不同數據表里面代表不同意思,所以在前端展現也不一致。)

  一般來說,在后台寫上數據字典,為了保持一致性,所以數據字典的定義可以在web應用中使用一個模塊定義,而頁面邏輯可以繼承該模塊,獲取所使用表格的數據字典。前台使用js函數轉化。數據字典的定義不必寫在前台,這樣前台的js轉化函數可以復用。不過客戶可以通過方法看到原始數據庫里面的數據。

  后台,給數據結構傳遞給context,並且傳遞tablename 的字符串,設置為bootstrap-table的table標簽 id,以及組合成查詢條件form 的id;這樣就會使得代碼極度復用。

def data_define():
    table_dict={
        "table1":{
            "field1":{
                "normal":"正常",
                "error":"異常",                
            }
        },
        "table2":{
            "field1":{
                "good":"",
                "bad":""
            }
        }
        
    }
    return table_dict

  前台引用該數據結構解釋某個字段

function translate_field(value,row){
    current_table={{ table_dict.tablename }}
    field_def=current_table[this.field]
    return field_def[value]

}

二.web應用

  web應用包括前台界面以及后台頁面處理,部分業務處理,以及需要向后台發送api應用發送請求

  a.html以及后台頁面處理:html頁面功能為展現,前端驗證用戶輸入,根據狀態決定控制邏輯。后台直接處理該頁面請求的函數,應該只涉及前台頁面輸入驗證,或者查詢其他模塊請求獲取用於展示的數據。不要寫可能會被復用的處理邏輯,不要寫別的系統性的體系中的零件。直接在這塊里面寫復雜邏輯會使得代碼分散,比如價格控制,此類邏輯應該用一個專門的模塊來處理,而非分散在各個頁面處理代碼中。由於價格控制是一個整體,而且很可能體系會進行變換,分散的代碼將使得維護變得困難。  

  b.請求api的數據:為了使得程序更加分布式,向數據庫處理的應用是獨立的,高性能的。部署在集群當中。web應用向api請求數據。我覺得應該就api的每個接口都統一寫成函數調用。而不是,每次請求api就需要自己寫一個url請求的代碼。然后判斷返回值之類的。因為這類的請求會多次發生,會被前端url直接調用,也可能被web的后台調用。所以寫成函數,大家都能夠很方便調用,不容易出錯。

  c.ajax請求處理:所有ajax請求都會對接收到的反饋進行處理,而對錯誤也進行反饋。如果希望所有處理保持一致,那么對於success的ajax請求應該使用建立單獨的函數提供每次success調用;同樣error處理相同。這樣希望替換某種出錯處理提示內容樣式,不需要去每個ajax請求中尋找,只需要更改單獨的函數。基本每個出錯提示信息顯示樣式都相同,不同只是文字內容。

     d.模塊獨立可運行,獨立可測試:多個模塊的程序組合的情況下,在web中,需要調用其他web應用的接口什么的,為了保證自己的模塊獨立可測試,在引用其他模塊的時候,加上try 再import,否則程序引用一多,很可能程序上線組合完成,再調試不了。因為可能東西揉合在一塊了,必須保證單獨模塊的獨立可運行。獨立可測試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM