日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爱说说技术原理:前后台参数约定及逻辑代码(三)

發布時間:2023/12/31 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爱说说技术原理:前后台参数约定及逻辑代码(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一節:"愛說說"技術原理:與TXT交互及MDataTable對Json的功能擴展?中,

?

我們解決了TXT數據存儲和Json的交互問題,本節,看一下后臺的業務邏輯:

?

愛說說:http://speak.cyqdata.com/?[當前版本已增加了音樂和表情]

?

先看Page_Load事件:

??????public?override?void Page_Load()
??????? {
??????????? if (day == 0)//首次初始化
??????????? {
??????????????? day = Now.Day;
??????????? }
????????????switch?(GetInt("t"))
??????????? {
??????????????? case 1://添加信息
??????????????????? if (PostBufferOK(0.05))//同一IP3秒提交一次
??????????????????? {
??????????????????????? outHtml = Add(Get("n"), Get("v"), GetInt("pid"));
??????????????????? }
??????????????????? break;
??????????????? case 2://刪除信息
??????????????????? outHtml = Del(GetInt("v"));
??????????????????? break;
??????????????? case 3://獲取更多信息
??????????????????? outHtml = Select(GetInt("v"), GetInt("s"));
??????????????????? break;
??????????????? case 4://獲取最新消息
??????????????????? outHtml = Select(GetInt("v"));
??????????????????? break;
??????????? }
??????? }

說明:通過分支,調用了不同的方法,最后通過outHtml輸出Json到客戶端。

?

下面進行詳細的分支解說:

?

一:數據提交:[用戶發布消息或回應消息時提交的數據]

?

參數約定:

類型參數:t=1

文本參數:v="這是提交的內容";

昵稱參數:n="路過秋天"

回應參數:pid=-1,[回應時帶回應消息的ID,非回應則為-1]

?

邏輯代碼:

??????? /// <summary>
??????? /// 發布消息
??????? /// </summary>
????????public string?Add(string?nickName,?string?body,?int?pid)
??????? {
????????????MDataRow?row = Table.NewRow();
??????????? int maxID = MaxID;
??????????? row.Set(0, maxID);
??????????? row.Set("ParentID", pid);
??????????? row.Set("UserID", IP.Replace(".",string.Empty));
??????????? row.Set("NickName", nickName);
??????????? row.Set("Body", body);
??????????? row.Set("CreatedOn", Now);
??????????? Table.Rows.Add(row);//內存表加一行
??????????? AppendText(row.ToJson());//寫入TXT文本一行
????????????return?maxID.ToString();
??????? }

?

二:數據刪除:[用戶刪除指定ID數據]

?

參數約定:

類型參數:t=2

行ID參數:v=88 [被刪除行的ID]

?

邏輯代碼

??????? /// <summary>
??????? /// 刪除消息
??????? /// </summary>
????????public string?Del(int?id)
??????? {
????????????MDataRow?row = Table.FindRow("ID", Op.Equal, id);
??????????? if (row != null)
??????????? {
??????????????? RemoveText(row.ToJson());//刪除文本一行
??????????????? Table.Rows.Remove(row);//刪除內存表一行
??????????? }
????????????return?id.ToString();
??????? }

?

三:數據加載[首次加載及點擊“瀏覽更多時”加載]

?

參數約定:

類型參數:t=3

值ID參數:v=id [最小ID,加載時都是取的最新的數據,每次都從后面取,所以比較最小ID]

分頁參數:s=20[每次20條消息]

?

邏輯代碼

????????public string?Select(int?minID,?int?pageSize)
??????? {
??????????? Op op = minID < 1 ? Op.None : Op.Small;//Small就是"<"號了
????????????return?Table.Select(1, pageSize, true, "ID", op, minID).ToJson();
??????? }

?

四:定時數據加載[定時多少秒取一次數據]

?

參數約定:

類型參數:t=4

值ID參數:v=id,[最大ID,每次根據最大ID進行查詢最新消息]

?

邏輯代碼

????????public string?Select(int?maxID)
??????? {
??????????? if (maxRowID >= maxID)//下面的Big就是">"號了
??????????? {
????????????????return?Table.Select(1, 60, true, "ID", Op.Big, maxID).ToJson();
??????????? }
????????????return?string.Empty;
??????? }

?

五:總體規劃[其它邏輯代碼]

?

上面四點,是比較重要四個邏輯,接下來補全一些旁支代碼。

?

1:全局的定義:

????????private static?int maxRowID = 0;//行ID
????????private static?MDataTable?_Table = null;//今天的數據表
????????private static?int day = 0;//今天

說明:

maxRowID,這是為了保證每條數據都有一個不重復的ID。

_Table:定義為靜態的,簡單的就叫內存表。

day:由于TXT文本只保存一天數據,提交時需要判斷是過天,如果是,需要新建新的TXT。?

?

2:方法屬性

?

2.1:內存表:

????????public?MDataTable?Table
??????? {
??????????? get
??????????? {
??????????????? if (_Table == null || day != Now.Day)//首次/緩存失效/第二天
??????????????? {
??????????????????? if (_Table != null)
??????????????????? {
??????????????????????? _Table.Rows.Clear();//第二天,清除前一天數據行
??????????????????? }
??????????????????? else
??????????????????? {
??????????????????????? day = Now.Day;
??????????????????? }
??????????????????? //嘗試加載文件
??????????????????? _Table =?MDataTable.LoadFromJson(LoadText());//從文本加載
??????????????????? if (_Table.Columns.Count == 0)
??????????????????? {
??????????????????????? _Table.Columns.Add("ID", SqlDbType.Int);//ID標識
??????????????????????? _Table.Columns.Add("ParentID", SqlDbType.Int);//>0說明是回貼
??????????????????????? _Table.Columns.Add("UserID", SqlDbType.Int);
??????????????????????? _Table.Columns.Add("NickName", SqlDbType.NVarChar);
??????????????????????? _Table.Columns.Add("Body", SqlDbType.NVarChar);//內容
??????????????????????? _Table.Columns.Add("CreatedOn", SqlDbType.DateTime);//創建日期
??????????????????????? AppendText(_Table.Columns.ToJson());//首行寫表架構信息
??????????????????? }
??????????????? }
????????????????return?_Table;
??????????? }
??????? }

2.2:最大行ID

????????public?int?MaxID
??????? {
??????????? get
??????????? {
??????????????? if (maxRowID > 0)//正常狀態
??????????????? {
??????????????????? maxRowID++;
??????????????? }
??????????????? else if (_Table != null && _Table.Rows.Count > 0)//緩存失效
??????????????? {
??????????????????? maxRowID = int.Parse(Convert.ToString(_Table.Rows[_Table.Rows.Count - 1][0].Value)) + 1;
??????????????? }
??????????????? else//第一次
??????????????? {
??????????????????? maxRowID = 1;
??????????????? }
????????????????return?maxRowID;
??????????? }
??????? }

2.3:文件的保存路徑:這個不多解釋了

????????public string?FilePath
??????? {
??????????? get
??????????? {
??????????????? string path = AppDomain.CurrentDomain.BaseDirectory + "txtFile/" + Now.ToString("yyyyMM") + "/";
??????????????? if (!Directory.Exists(path))
??????????????? {
??????????????????? Directory.CreateDirectory(path);
??????????????? }
??????????????? path = path + Now.Day + ".txt";
??????????????? if (!File.Exists(path))
??????????????? {
??????????????????? File.Create(path).Close();
??????????????? }
????????????????return?path;
??????????? }
??????? }

3:MDataTable?的Select函數介紹:可以方便查詢滿足條件的行

??????? /// <summary>
??????? /// 表查詢[支持分頁與單個條件]
??????? /// </summary>
??????? /// <param name="pageIndex">頁索引</param>
??????? /// <param name="pageSize">每頁多少條</param>
??????? /// <param name="reverse">反轉排序</param>
??????? /// <param name="column">條件列</param>
??????? /// <param name="op">條件符號</param>
??????? /// <param name="value">條件過濾值</param>
??????? /// <returns>返回新的MDataTable</returns>
????????public?MDataTable?Select(int?pageIndex,?int?pageSize,?bool?reverse,?string?column,?Op?op,?object?value)

?

最后總結:

?

本節的后臺邏輯代碼就到此結束。

當然“愛說說”后面擴展和完善了很多,本文就不糾結的一個一個講了,

只把大體功能講完,就開源了,大伙再細看細節方面代碼。

?

下一節我們講客戶端調用及優化等注意事項,敬請關注。

版權聲明:本文原創發表于博客園,作者為路過秋天,原文鏈接:

http://www.cnblogs.com/cyq1162/archive/2011/04/27/2030446.html

總結

以上是生活随笔為你收集整理的爱说说技术原理:前后台参数约定及逻辑代码(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。