使用TT模板+mvc+wcf實現簡單查詢

來源:互聯網
上載者:User

標籤:部落格   技術   執行個體   mvc   wcf   

       伴隨著春姑娘調皮的腳步,小編接手的檔案管理項目也漸漸步入正軌,從開始的需求分析,到使用Axure畫原型圖,再到使用powerdesigner設計實體,產生資料庫,一直到昨天剛剛通了一條線,這一路走來,小編懂得了很多,無路學習還是和團隊小夥伴的交流合作,有時候,總是會因為大家意見不統一,搞的大家吹鬍子瞪眼,但有時也會因為某件事情圓滿成功而歡欣鼓舞,小組中最開心的事兒莫過於有人開會遲到買吃的了,哈哈,暴露了小編的本質,開頭說了這麼多,接下來,小編就跟分享一下,如果利用TT模板+mvc+wcf實現簡單查詢,有不同意見的小夥伴歡迎討論交流......

        首先,搭建好架構,分別為mvc,wcf,B,D,在這裡說明一下在這裡我們使用TT模板,TT模板好陌生的名字,小編以前都不知道在這個世界上有她的存在,再此,對不住了TT,TT在背後默默無聞的奉獻著,猶如蠟燭,燃燒自己照亮別人,直到這次接手項目,小編才有幸見到她猶抱琵琶半遮面的神奇,小編簡單來介紹一下TT模板,也叫T4模板,全稱Text Template Transformation Toolkit是微軟官方在VisualStudio 2008中開始使用的代碼產生引擎。在 Visual Studio 中,“T4 文本模板”是由一些文字區塊和控制邏輯組成的混合模板,它可以產生文字檔。 在 Visual C# 或 Visual Basic 中,控制邏輯編寫為程式碼的片段。產生的檔案可以是任何類型的文本,例如網頁、資源檔或任何語言的程式原始碼。現在的VS中只要與代碼產生相關的情境基本上都能找T4的身影,比如MVC的視圖模板,Entity Framwork的DataContext模板等等。所以B層和D層都是產生好的,不需要我們自己再動手敲了,搭建好的架構如下所示:

        

        好的,接下來,小編就開始著手敲代碼了,第一步,我們需要在服務契約裡面建立介面,定義方法,代碼如下所示:

        

<span style="font-size:18px;">using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.Serialization;using System.ServiceModel;using ITOO.Archives.Contracts;namespace ITOO.Archives.Contracts{    //服務合約定義    [ServiceContract]     public interface IQuery    {        //要公開的服務方法        [OperationContract]        //定義一個查詢的方法        List<Query> query();    }}</span>
        第二步:在總結口後面加上逗號和剛才在服務契約裡面寫的介面,代碼如下所示:

<span style="font-size:18px;"><span style="font-size:18px;">using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.Serialization;using System.ServiceModel;namespace ITOO.Archives.Contracts{    //服務合約定義    [ServiceContract]    //在總介面後面寫上相應的分介面,具體實現寫在分介面    public interface IArchivesService : ITest,IQuery    {    }}</span></span>
       第三步:在服務工廠中添加方法,得到該介面的方法,代碼如下所示:

       

<span style="font-size:18px;">using System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.Text;using ITOO.Archives.Contracts;namespace ITOO.Archives.Contracts{    public class ServiceFactory    {        private static readonly SortedList<string, IArchivesService> _serviceBusiness = new SortedList<string, IArchivesService>();        #region 基礎方法        /// <summary>        /// 擷取中心管理系統所有的業務方法        /// </summary>        /// <param name="endpointName"></param>        /// <returns></returns>        public static IArchivesService GetServiceBusiness(string endpointName)        {            IArchivesService iServices;            iServices = CreateWCFInterface(endpointName);            if (_serviceBusiness.ContainsKey(endpointName))            {                iServices = _serviceBusiness[endpointName];            }            else            {                if (true)                {                    iServices = CreateWCFInterface(endpointName);                }                else                {                    //暫時不用                    // iServices = CreateLocalInterface();                }                _serviceBusiness.Add(endpointName, iServices);            }            return iServices;        }               private static IArchivesService CreateWCFInterface(string endpointName)        {            return ServiceProxyFactory.Create<IArchivesService>(endpointName);        }        /// <summary>        ///         /// </summary>        /// <typeparam name="T">介面</typeparam>        /// <returns></returns>        public static T Create<T>()        {            return (T)GetServiceBusiness("Service");        }        /// <summary>        ///         /// </summary>        /// <typeparam name="T">介面</typeparam>        /// <param name="endpointName"></param>        /// <returns></returns>        public static T Create<T>(string endpointName)        {            // WuliuFactory.Create<IWlTool>("wuliu")            return (T)GetServiceBusiness(endpointName);        }        #endregion        #region 實體服務        /// <summary>        /// 學生資訊        /// </summary>        /// <returns></returns>        public static ITest GetAllrecordSchoolCensusManage()        {            return GetServiceBusiness("BasicHttpBinding_Services");        }        #endregion        #region 實體服務        /// <summary>        /// 異動表資訊        /// </summary>        /// <returns></returns>        public static IQuery GetRecordChange()        {            return GetServiceBusiness("BasicHttpBinding_Services");        }        /// <summary>        /// 檔案借閱資訊        /// </summary>        /// <returns></returns>        public static ITestTwo GetRecordBorrow()        {            return GetServiceBusiness("BasicHttpBinding_Services");        }        #endregion    }}</span>
        第四步:寫資料契約,小編理解的這塊就跟我們當時敲三層的時候中的實體層特別相似,代碼如下:

        

<span style="font-size:18px;">using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.Serialization;namespace ITOO.Archives.Contracts{    [DataContract]    public class Query    {        //資料契約(DataContract) 服務契約定義了遠端存取對象和可供調用的方法,資料契約則是服務端和用戶端之間要傳送的自訂資料類型,一旦聲明一個類型為DataContract,那麼該類型就可以被序列化在服務端和用戶端之間傳送        [DataMember]        public string name { get; set; }        [DataMember]        public string ratity { get; set; }        [DataMember]        public string reason { get; set; }        [DataMember]        public string sex { get; set; }        [DataMember]        public string studentID { get; set; }        [DataMember]        public string time { get; set; }        [DataMember]        public string type { get; set; }            }}</span>
       第五步:在WcfService中建立類實現契約裡面的方法,代碼如下所示:

       

<span style="font-size:18px;">/************************************************* 丁國華小組:  ArchivesModel說明:測試小例子建立日期:2015年2月6日 14:46:27版本號碼:1.0**********************************************/using System;using System.Collections.Generic;using System.Linq;using System.Web;using ITOO.Archives.BLL;using ITOO.Archives.Model;using ITOO.Archives.DAL;using ITOO.Library.Core;using ITOO.Archives.Contracts;using ITOO.Archives.IBLL;using ITOO.Archives.BLLFactory;using AutoMapper;namespace ITOO.Archives.WCFService{    public partial class ArchivesService : IQuery    {        /// <summary>        /// 查詢檔案借閱情況        /// </summary>        /// <returns></returns>        public List<Query> query()        {            List<Query> listQuery = new List<Query>();            //工廠建立B層            IT_recordChangeBLL recBLL = BLLAbstractFactory.GetT_recordChangeBLL();            //建立一個關係            Mapper.CreateMap<T_recordChange, Query>();            //調用底層方法            var result = recBLL.LoadEnities(u => u.name != "0").ToList();            //轉換實體(實體的屬性名稱、資料類型必須一樣)           listQuery = Mapper.Map<List<T_recordChange>, List<Query>>(result);           return listQuery;        }    }}</span>
        第六步:這個時候開始著手寫前端代碼,建立控制器,代碼如下所示:

<span style="font-size:18px;">using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.Text;using ITOO.Archives.Contracts;namespace ITOO.Archives.Client.Controllers{    public class queryController : Controller     {              //調用ServiceFactory的GetRecordChange方法        private IQuery queryService = ServiceFactory.GetRecordChange();        //        public ActionResult queryIndex()        {            List<Query> listResult = queryService.query();            ViewData["data"] = listResult;            return View();        }    }}</span>
        第七步:添加視圖+前端代碼,如下所示:

         

<span style="font-size:18px;">@{    }<script type="text/javascript" src="../../Scripts/KongJianJS/KongJianJS.js"></script><script type="text/javascript" src="../../Scripts/KongJianJS/KongJianJS.js"></script><script src="../../Scripts/CourseTypeJS/js/jquery.easyui.min.js" type="text/javascript" ></script><script src="../../Content/jquery-easyui-1.3.2/locale/easyui-lang-zh_CN.js"></script><link rel="stylesheet" type="text/css" href="../../Scripts/CourseTypeJS/js/css/easyui/icon.css"/><link rel="stylesheet" type="text/css" href="../../Scripts/CourseTypeJS/js/css/common/common.css"/><link href="../../Content/index.css" rel="stylesheet" /><link href ="../../CSS/index.css" rel ="stylesheet"/><h2>queryIndex</h2><div>          <table id="dg" class="easyui-datagrid" style="width: 600px; height: 300px" >              <thead>                  <tr>                      <th data-options="field:'name',width:148,sortable:true">ID</th>                      <th data-options="field:'ratity',width:148,sortable:true">姓名</th>                      <th data-options="field:'reason',width:148,sortable:true">性別</th>                      <th data-options="field:'sex',width:148,sortable:true">呵呵</th>                      <th data-options="field:'studentID ',width:148,sortable:true">哈哈</th>                      <th data-options="field:'time',width:148,sortable:true">嘿嘿</th>                      <th data-options="field:'type',width:148,sortable:true">嘻嘻</th>                  </tr>              </thead>              @foreach (ITOO.Archives.Contracts.Query enQuery in ViewData["data"] as List<ITOO.Archives.Contracts.Query>)          {              <tr>                  <td>@enQuery.name </td>                  <td>@enQuery.ratity  </td>                  <td>@enQuery.reason  </td>                  <td>@enQuery.sex  </td>                <td>@enQuery.studentID  </td>                <td>@enQuery.time  </td>                <td>@enQuery.type  </td>            </tr>          }          </table>      </div> </span>
        還有一個特別需要提醒各位小夥伴的是,由於這個不能單個把某個頁面設成起始頁,那如果我們完成某個小功能的時候,想要看看運行效果怎麼辦呢?代碼設定如下:

<span style="font-size:18px;">using System;using System.Collections.Generic;using System.Data.Entity;using System.Data.Entity.Infrastructure;using System.Linq;using System.Web;using System.Web.Mvc;using System.Web.Routing;namespace ITOO.Archives.Client{    // 注意: 有關啟用 IIS6 或 IIS7 傳統模式的說明,    // 請訪問 http://go.microsoft.com/?LinkId=9394801    public class MvcApplication : System.Web.HttpApplication    {        public static void RegisterGlobalFilters(GlobalFilterCollection filters)        {            filters.Add(new HandleErrorAttribute());        }        public static void RegisterRoutes(RouteCollection routes)        {            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");            //routes.MapRoute(            //    "Default", // 路由名稱            //    "{controller}/{action}/{id}", // 帶有參數的 URL            //    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數預設值            //);            routes.MapRoute(                "Default", // 路由名稱                "{controller}/{action}/{id}", // 帶有參數的 URL                new { controller = "query", action = "queryIndex", id = UrlParameter.Optional }            );            //routes.MapRoute(            //    "Default", // 路由名稱            //    "{controller}/{action}/{id}", // 帶有參數的 URL            //    new { controller = "testTwo", action = "testTwoIndex", id = UrlParameter.Optional }            //);        }        protected void Application_Start()        {            AreaRegistration.RegisterAllAreas();            // 預設情況下對 Entity Framework 使用 LocalDB            Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");            RegisterGlobalFilters(GlobalFilters.Filters);            RegisterRoutes(RouteTable.Routes);        }    }}</span>
        至此一個使用TT模板+mvc+wcf實現一個簡單查詢的例子就完成了,效果如下:

        

        資料庫中的資料是小編瞎添加的,不規範,還請各位小夥伴見諒。

        小編寄語:該博文主要跟大家分享一下小編在做項目過程中收穫的點點滴滴,對於wcf和mvc的理解還很淺,有待繼續學習,有不同意見的小夥伴還請多多指教,利用TT模板和mvc以及wcf實現簡單的查詢,說實話,剛開始的時候真的不會,又有種那個時候敲機房的感覺,憋了好長時間,終於一條線通了,高興ing,檔案管理項目,未完待續......


使用TT模板+mvc+wcf實現簡單查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.