Git.Framework 框架隨手記-- 分享一個"比較垃圾"的專案

賀臣發表於2015-01-28

 

  本文主要分享一個Git.Framework 開發的一個專案的部分原始碼,此專案程式碼"比較垃圾",所以請各位碼農,碼畜,碼神,碼聖勿噴!發此文只為記錄工作問題以及分享問題!

 

一. 專案簡介

  本專案原是某單位的票務管理系統,用於某時裝週來進行票務分配以及門票校驗使用的。其主要分為兩部分: 後臺管理系統 和 移動終端 。

  使用到的技術:  asp.net ,SQL Server,Wince,Sqlite

 

二. 前端展示

  常用前端技術: bootstrap,jquery

  前端是很多程式開發人員的詬病,CSS,html 永遠拖著後退, bootstrap絕對值得你擁有,參考地址 ; 別人高大上的東西你也能夠輕輕鬆鬆實現

  (1) 登入頁面

  

 

  (2) 列表頁面

  

 

  (3) 無重新整理載入資料

  

 

三. 前端和後臺互動實現

  這裡前端和後臺互動資料使用WebMethod方法來處理,具體程式碼如下:

[WebMethod(MessageName = "GetList", EnableSession = true)]
public static string GetList(PageInfo pageInfo, ShowFieldEntity entity)
{
            ShowProvider provider = new ShowProvider();
            List<ShowFieldEntity> listResult = provider.GetList(entity, ref pageInfo);
            listResult = listResult == null ? new List<ShowFieldEntity>() : listResult;
            RuleProvider ruleProvider = new RuleProvider();
            StringBuilder sb = new StringBuilder();
            JsonObject jsonResult = new JsonObject();

            JsonProperty p = new JsonProperty();
            JsonObject jsonObject = null;
            if (listResult.Count > 0)
            {
                foreach (var t in listResult)
                {
                    string Begin = ruleProvider.BeginTicketNum(t.FieldNum);
                    int Num = ruleProvider.GetNum(t.FieldNum);
                    int unNum = ruleProvider.GetNum(t.FieldNum, "admin");//獲得未分配的票數
                    int useNum = Num - unNum;//獲得已分配的票數
                    jsonObject = new JsonObject();
                    jsonObject.AddProperty("FieldNum", t.FieldNum);
                    jsonObject.AddProperty("FieldName", t.FieldName);
                    jsonObject.AddProperty("Begin", Begin);
                    jsonObject.AddProperty("Num", Num);
                    jsonObject.AddProperty("useNum", useNum);
                    jsonObject.AddProperty("unNum", unNum);
                    jsonObject.AddProperty("Remark", t.Remark);
                    jsonObject.AddProperty("CreateTime", t.CreateTime.ToString());
                    p.Add(jsonObject);
                }
                jsonResult.AddProperty("list", p.Items.Select(a => a.Object).ToArray());
            }
            jsonResult.AddProperty("count", pageInfo.RowCount);
            string json = jsonResult.ToString();
            return json;
}
WebMethod 方法

  在aspx.cs程式碼檔案中的程式碼如上方式書寫,即可將一個方法釋出為WebMethod方法,類似於WebService可供前端來呼叫

PageClick: function (pageIndex) {
        var fieldName = $("#txtFieldName").val();
        var remark = $("#txtRemark").val();
        var pageSize = 10000;
        var jsonParam = '{ "pageInfo":{"PageIndex":' + pageIndex + ', "PageSize":' + pageSize + ' },"entity":{"FieldName":"' + fieldName + '","Remark":"' + remark + '"}}';
        $.WebService("/Show/List.aspx/GetList", jsonParam,
        function (result) {
            var Html = "";
            var json = $.parseJSON(result.d);
            
            if (json.list != null && json.list.length > 0) {
                
                $.each(json.list, function (index, item) {
                    Html += "<tr>";
                    Html += "<td align=\"center\"><input type=\"checkbox\" class='checkItem' id=\"" + item.FieldNum + "\" /></td>";
                    Html += "<td>" + (index + 1) + "</td>";
                    Html += "<td>" + item.FieldName + "</td>";
                    Html += "<td>" + item.Begin + "</td>";
                    Html += "<td>" + (item.Num == undefined || item.Num == null ? "" : item.Num) + "</td>";
                    Html += "<td>" + item.unNum + "</td>";
                    Html += "<td>" + item.useNum + "</td>";
                    Html += "<td>" + item.Remark + "</td>";
                    Html += "<td>" + item.CreateTime + "</td>";
                    Html += "<td><a href='javascript:void(0)' onclick=\"Show.Edit('" + item.FieldNum + "','" + item.FieldName + "','" + item.Remark + "')\">編輯</a>&nbsp;&nbsp;";
                    Html+="<a href='javascript:void(0)' onclick=\"Show.ItemDel('" + item.FieldNum + "')\">刪除</a>&nbsp;&nbsp;";
                    Html += "<a href=\"/Rule/Report.aspx?FieldNum=" + item.FieldNum + "\">報表</a>";
                    Html += "&nbsp;&nbsp;<a href=\"/Rule/Add.aspx?FieldNum=" + item.FieldNum + "\">發票計劃</a>";
                    Html += "</td>";
                    Html += "</tr>";
                });
            } else {
                Html += " <tr id=\"zero\"> <td colspan='10'> <center>沒有找到記錄!<center>  </td>  </tr>";
            }
            $("#tabList tbody").html(Html);
            // $("#mypager").pager({ pagenumber: pageIndex, recordCount: json.count, pageSize: pageSize, customerText: true, buttonClickCallback: Show.PageClick });
            $.jBox.closeTip()
        }, function () {
            $.jBox.tip("正在載入...", 'loading');
        }, function () {
            $.jBox.tip("載入入庫單列表錯誤!", 'error');
        });
    },
前端呼叫後臺方法

  在js中擴充套件了jQuery 的一個方法 WebService,用於呼叫後臺的方法獲取資料,其中比較重要的程式碼如下:

$.WebService("/Show/List.aspx/GetList",,)

  這裡是請求頁面地址,後面GetList為後臺WebMethod釋出的方法, 其中GetList指向如下

[WebMethod(MessageName = "GetList", EnableSession = true)]

  /Show/List.aspx/GetList  就是呼叫 頁面"/Show/List.aspx" 中 MessageName="GetList" 修飾的方法

 

四. Sqlite 中常見的問題

  

  相信使用過SQLite的也會經常遇到這個問題, 在.NET中呼叫Sqlite操作,需要新增一個動態連結庫,會經常出現這個問題.

  如果出現如上錯誤,可以根據如下幾個方面去查詢問題:

  (1) Sqlite 對應的版本問題,最好到官網下載完整的檔案包

  (2) 系統32,64位的問題, 一般在IIS中應用程式中>>應用程式池預設設定>>啟用32位應用程式 (大部分在VS中除錯正常IIS失敗的原因在於此處)

  (3) 動態連結庫貌似是基於C++,所以需要安裝C++環境,一般.NET有自帶

 

五. 整合操作ORM

  這裡又提到了ORM,很噁心,既不是Linq to SQL , 也不是EF,更加不是NHibernate等, 這裡我們稱之為 "GIT" 。如何如此自己明白就好,  這是自己開發的一個ORM操作元件,自我評價:"自我感覺良好,大牛嗤之以鼻,菜鳥不知所云"。

public partial interface ITicketRule : IDbHelper<TicketRuleEntity>
{
}


public partial interface ITicket : IDbHelper<TicketEntity>
{
}
資料操作介面

  其實沒啥意義,就是繼承了上一個介面

public partial class TicketDataAccess : DbHelper<TicketEntity>, ITicket
{
        public TicketDataAccess()
        {
        }

}



public partial class TicketRuleDataAccess : DbHelper<TicketRuleEntity>, ITicketRule
{
        public TicketRuleDataAccess()
        {
        }

}
資料操作實現程式碼

  通過以上程式碼基本可以實現對錶TicketRule,Ticket 的基本增刪改查,其他的ORM都可以實現,沒啥好炫的,就怕不小心炫瞎了自己的眼睛 ,低調好!

public List<ShowFieldEntity> GetList(ShowFieldEntity entity, ref PageInfo pageInfo)
        {
            entity.Include(a => new {  a.FieldNum,a.FieldName,a.BeginTime,a.EndTime,a.CreateTime,a.CreateUser,a.Remark});
            if (!entity.FieldName.IsEmpty())
            {
                entity.Where("FieldName", ECondition.Like, "%" + entity.FieldName + "%");
            }
            if (!entity.Remark.IsEmpty())
            {
                entity.Where("Remark", ECondition.Like, "%" + entity.Remark + "%");
            }
            entity.OrderBy(a => a.ID, EOrderBy.DESC);
            int rowCount = 0;
            List<ShowFieldEntity> listResult = this.ShowField.GetList(entity,pageInfo.PageSize,pageInfo.PageIndex,out rowCount);
            pageInfo.RowCount = rowCount;
            return listResult;
        }
查詢分頁程式碼

  

 六. 部分原始碼開放

  很不好意思的吊胃口,我只能公開部分原始碼,畢竟涉及到公司的商業專案,所以只能如此.

  獲取部分原始碼請加入群 88718955  ,我真的不是來發廣告的!有問題大家多多交流, 我也要成為大牛。

 


作者:情緣
出處:http://www.cnblogs.com/qingyuan/
關於作者:從事倉庫,生產軟體方面的開發,在專案管理以及企業經營方面尋求發展之路
版權宣告:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。
聯絡方式: 個人QQ  821865130 ; 倉儲技術QQ群 88718955,142050808 ;
吉特倉儲管理系統 開源地址: https://github.com/hechenqingyuan/gitwms

 

相關文章