三個文件夾,第一個是放置前端部分,第二個是各種支持的類文件,第三個是單元測試文件。
?
Core文件類庫
放置的是與數據庫做交互的文件,以及一些第三方類庫,還有與數據庫連接的文件
1.Lasy.Validator是一個基于Attribute驗證器,我覺得這種驗證方式在挺便捷的,具體可以在這里查看到
app.config是一個連接數據庫的配置文件,兩個數據庫一個是測試用的,一個是調試用的
<?xml?version="1.0"?encoding="utf-8"??><configuration><configSections></configSections><connectionStrings><add?name="QuyouCore.Properties.Settings.ClubConnectionString"connectionString="Data?Source=192.168.1.214;Initial?Catalog=Club;User?ID=sa;Password=123456"providerName="System.Data.SqlClient"?/><add?name="QuyouCore.Properties.Settings.ClubTestConnectionString"connectionString="Data?Source=192.168.1.214;Initial?Catalog=Club_Test;User?ID=sa;Password=123456"?/></connectionStrings></configuration>
點擊core文件夾進入數據庫操作
1.DataAccess
DataAccess中主要就是一些數據庫的增刪改查操作了
Connection.cs是連接數據的文件,主要根據前端文件夾下面的bin文件中的XML文件來操作是連接哪個數據庫,用XML就可以很方便的不重新編譯直接換數據庫
<?xml?version="1.0"?encoding="utf-8"??><connectionStringToUse><!--?this?value?can?be?Local?(pc),?Production?(server),?or?Test?(test)--><environment>Production</environment></connectionStringToUse>
?1?using?System;?2?using?System.Web;?3?using?System.Xml;?4?using?QuyouCore.Core.Domain;?5?using?QuyouCore.Properties;?6??7?namespace?QuyouCore.Core.DataAccess.Impl?8?{?9?????public?class?Connection10?????{11?????????public?Connection()12?????????{13?????????????ConnString?=?GetCurrentConnectionString();14?????????}15?????????public?ClubDataContext?GetClubContext()16?????????{17?????????????var?vcd?=?new?ClubDataContext(ConnString);18?????????????//vcd.Log?=?new?DebuggerWriter();19?????????????return?vcd;20?????????}21?????????public?string?GetCurrentConnectionString()22?????????{23?????????????var?connString?=?string.Empty;24?????????????try25?????????????{26?????????????????var?doc?=?new?XmlDocument();27?????????????????doc.Load(HttpContext.Current.Request.PhysicalApplicationPath?+?"bin/ConnectionStringToUse.xml");28?????????????????var?xnl?=?doc.GetElementsByTagName("environment");29?????????????????var?xe?=?(XmlElement)xnl[0];30?????????????????switch?(xe.InnerText.ToLower())31?????????????????{32?????????????????????case?"local":33?????????????????????????connString?=?Settings.Default.ClubConnectionString;34?????????????????????????break;35?????????????????????case?"production":36?????????????????????????connString?=?Settings.Default.ClubServerConnectionString;37?????????????????????????break;38?????????????????????case?"test":39?????????????????????????connString?=?Settings.Default.ClubTestConnectionString;40?????????????????????????break;41?????????????????}42?????????????}43?????????????catch?(Exception?e)44?????????????{45?????????????????connString?=?Settings.Default.ClubTestConnectionString;46?????????????}47?????????????return?connString;48?????????}49?50?????????public?string?ConnString51?????????{52?????????????get;53?????????????set;54?????????}55?????}56?}
BaseRepository.cs文件是做一些通用的Linq查詢語句,還有就是寫Log操作,將各個查詢語句記錄下來,便于調試,這里用到的Log工具是log4net
using?System.Collections.Generic;using?System.Data.Linq;using?System.Linq;using?QuyouCore.Core.Domain;using?QuyouCore.Core.Enum;using?QuyouCore.Core.Util;using?System;using?System.Linq.Expressions;namespace?QuyouCore.Core.DataAccess.Impl {????public?class?BaseRepository{????????protected?BaseRepository(){Conn?=?new?Connection();DataContext?=?new?RepositoryContext(Conn.ConnString);}????????#region?Properties????????///?<summary>///?Gets?or?sets?the?data?context.????????///?</summary>///?<value>The?data?context.</value>private?RepositoryContext?DataContext?{?get;?set;?}????????protected?Connection?Conn?{?get;?set;?}????????#endregion#region?Entity?and?metadata?functions????????///?<summary>///?分頁????????///?</summary>protected?DataPageList<TEntity>?GetEntitiesByPage<TEntity>(IQueryable?query,?int?page,?int?size,?DataContext?context){context.Log?=?FileLog.Out;????????????var?data?=?DataPageList<TEntity>.Create<TEntity>(query,?page,?size);WriteLog(FileLog.FileInfo.ToString());????????????return?data;}????????///?<summary>///?根據條件獲取一條數據????????///?</summary>protected?TEntity?GetEntity<TEntity>(Expression<Func<TEntity,?bool>>?queryFunc)?where?TEntity?:?class?//Entity{DataContext.Log?=?FileLog.Out;????????????var?results?=?from?entity?in?DataContext.GetTable<TEntity>()??????????????????????????select?entity;results?=?results.Where(queryFunc);????????????var?result?=?results.FirstOrDefault();WriteLog(FileLog.FileInfo.ToString());????????????return?result;}????????///?<summary>///?根據條件獲取數據信息列????????///?</summary>protected?List<TEntity>?GetEntities<TEntity>(Expression<Func<TEntity,?bool>>?queryFunc)?where?TEntity?:?class?//Entity?{DataContext.Log?=?FileLog.Out;????????????var?query?=?from?entity?in?DataContext.GetTable<TEntity>()??????????????????????????select?entity;query?=?query.Where(queryFunc);????????????var?results?=?query.ToList();WriteLog(FileLog.FileInfo.ToString());????????????return?results;}????????protected?List<TEntity>?GetEntities<TEntity>(IQueryable<TEntity>?query)?where?TEntity?:?class?//Entity?{DataContext.Log?=?FileLog.Out;????????????var?results?=?query.ToList();WriteLog(FileLog.FileInfo.ToString());????????????return?results;}????????protected?IQueryable<TEntity>?GetQueryEntities<TEntity>(Expression<Func<TEntity,?bool>>?queryFunc)?where?TEntity?:?class?//Entity?{????????????var?query?=?from?entity?in?DataContext.GetTable<TEntity>()????????????????????????select?entity;????????????return?query.Where(queryFunc);}????????///?<summary>///?獲取所有數據????????///?</summary>protected?List<TEntity>?GetEntities<TEntity>()?where?TEntity?:?class?//Entity?{DataContext.Log?=?FileLog.Out;????????????var?query?=?from?entity?in?DataContext.GetTable<TEntity>()??????????????????????????select?entity;????????????var?results?=?query.ToList();WriteLog(FileLog.FileInfo.ToString());????????????return?results;}????????#endregionprotected?void?WriteLog(string?log){WriteLog(log,?EnumLog.Level.Info);}????????protected?void?WriteLog(string?log,?EnumLog.Level?level){????????????switch?(level){????????????????case?EnumLog.Level.Debug:?LogHelper.GetInstance().Debug(log);????????????????????break;????????????????case?EnumLog.Level.Error:LogHelper.GetInstance().Error(log);????????????????????break;????????????????case?EnumLog.Level.Warn:LogHelper.GetInstance().Warn(log);????????????????????break;????????????????case?EnumLog.Level.Fatal:LogHelper.GetInstance().Fatal(log);????????????????????break;????????????????case?EnumLog.Level.Info:LogHelper.GetInstance().Info(log);????????????????????break;????????????????default:LogHelper.GetInstance().Info(log);????????????????????break;}????????????//LogHelper.GetInstance().Logger.Repository.Shutdown();}} }
下面的代碼是一些簡單的增刪改查,但是一些比較難的SQL語句,有時候比較棘手,你可以使用一個翻譯工具,將SQL轉換成,叫做Linqer,使用操作也很簡單,操作界面如圖。
using?System.Collections.Generic;using?System.Linq;using?QuyouCore.Core.Domain;namespace?QuyouCore.Core.DataAccess.Impl {????public?class?KeywordRepository?:?BaseRepository,?IKeywordRepository{????????public?int?Insert(tb_Keyword?data){????????????using?(var?cd?=?Conn.GetClubContext()){cd.tb_Keyword.InsertOnSubmit(data);cd.SubmitChanges();????????????????return?data.KeywordTypeId;}}????????///?<summary>///?根據主鍵更新表內容????????///?</summary>public?void?Update(tb_Keyword?data){????????????using?(var?cd?=?Conn.GetClubContext()){????????????????var?update?=?cd.tb_Keyword.Single(t?=>?t.KeywordId?==?data.KeywordId);update.KeywordTypeId?=?data.KeywordTypeId;update.Name?=?data.Name;update.Pinyin?=?data.Pinyin;cd.SubmitChanges();}}????????///?<summary>///?根據編號將信息更新為刪除狀態????????///?</summary>public?void?Delete(int?id){????????????using?(var?cd?=?Conn.GetClubContext()){????????????????var?update?=?cd.tb_Keyword.Single(t?=>?t.KeywordId?==?id);update.Active?=?false;cd.SubmitChanges();}}????????public?List<tb_Keyword>?GetKeywordsByTypeId(tb_Keyword?data){????????????return?GetEntities<tb_Keyword>(t?=>?t.Active?==?data.Active?&&t.KeywordTypeId?==?data.KeywordTypeId);}} }
?
2.Domain
Domain文件里面的Club.dml內容是自動生成的
在這里面還放了一些,數據庫表格的擴展字段以及一個分頁類DataPageList.cs
namespace?QuyouCore.Core.Domain {????public?partial?class?tb_Keyword{????????//public?static?readonly?string?TableName?=?"tb_Keyword";????????//public?static?readonly?string?ColumnKeywordId?=?"KeywordId";????????//public?static?readonly?string?ColumnKeywordTypeId?=?"KeywordTypeId";????????//public?static?readonly?string?ColumnName?=?"Name";????????//public?static?readonly?string?ColumnAddTime?=?"AddTime";} }
??1?using?System.Collections;??2?using?System.Collections.Generic;??3?using?System.Linq;??4???5?namespace?QuyouCore.Core.Domain??6?{??7?????///?<summary>??8?????///?數據列表??9?????///?</summary>?10?????///?<typeparam?name="T">類型</typeparam>?11?????public?class?DataPageList<T>?:?IEnumerable?12?????{?13?????????#region?成員變量?14??15?????????private?System.Linq.IQueryable<T>?query;?16?????????private?int?allRecordCount;?17?????????private?int?thisPageRecordCount;?18?????????private?int?pageSize;?19?????????private?int?pageCount;?20?????????private?int?indexPage;?21?????????private?bool?canFirstPage;?22?????????private?bool?canPrevPage;?23?????????private?bool?canNextPage;?24?????????private?bool?canLastpage;?25?????????private?List<T>?listValue;?26??27?????????#endregion?28??29??30?????????#region?構造函數?31??32?????????//私有構造函數,只能通過內部構造?33?????????private?DataPageList(System.Linq.IQueryable<T>?Query,?int?IndexPage,?int?PageSize)?34?????????{?35?????????????query?=?Query;?36?????????????indexPage?=?IndexPage;?37?????????????pageSize?=?PageSize;?38?????????????PageAttrList?=?new?List<PageAttr>();?39?????????????Update();?40?????????}?41??42?????????private?DataPageList(System.Linq.IQueryable<T>?Query)?43?????????????:?this(Query,?1,?0)?44?????????{?45?????????}?46??47?????????#endregion?48??49??50?????????#region?屬性?51??52?????????public?int?AllRecordCount?53?????????{?54?????????????get?{?return?allRecordCount;?}?55?????????}?56??57?????????public?int?ThisPageRecordCount?58?????????{?59?????????????get?{?return?thisPageRecordCount;?}?60?????????}?61??62?????????public?int?PageSize?63?????????{?64?????????????get?{?return?pageSize;?}?65?????????????set?{?pageSize?=?value;?}?66?????????}?67??68?????????public?int?PageCount?69?????????{?70?????????????get?{?return?pageCount;?}?71?????????}?72??73?????????public?int?IndexPage?74?????????{?75?????????????get?{?return?indexPage;?}?76?????????????set?{?indexPage?=?value;?}?77?????????}?78??79?????????public?bool?CanFirstPage?80?????????{?81?????????????get?{?return?canFirstPage;?}?82?????????}?83??84?????????public?bool?CanPrevPage?85?????????{?86?????????????get?{?return?canPrevPage;?}?87?????????}?88??89?????????public?bool?CanNextPage?90?????????{?91?????????????get?{?return?canNextPage;?}?92?????????}?93??94?????????public?bool?CanLastPage?95?????????{?96?????????????get?{?return?canLastpage;?}?97?????????}?98??99?????????public?List<T>?Value100?????????{101?????????????get?{?return?listValue;?}102?????????}103?104?????????public?class?PageAttr105?????????{106?????????????public?int?Page?{?get;?set;?}107?????????}108?109?????????public?List<PageAttr>?PageAttrList110?????????{111?????????????get;?set;112?????????}113?????????#endregion114?115?????????#region?索引器116?117?????????public?T?this[int?index]118?????????{119?????????????get?{?return?listValue[index];?}120?????????????set?{?listValue[index]?=?value;?}121?????????}122?123?????????#endregion124?125?????????#region?公開方法126?127?????????/**/128?129?????????///?<summary>130?????????///?創建自身實例131?????????///?</summary>132?????????///?<typeparam?name="N">類型,如果此處為匿名類型,請用var?定義實體,且類后的T為object(其實什么也不重要,只是用于可以調用當前類的靜態方法)</typeparam>133?????????///?<param?name="Query">Linq查詢語句</param>134?????????///?<param?name="type">元素類型</param>135?????????///?<param?name="IndexPage">開始頁</param>136?????????///?<param?name="PageSize">每頁大小</param>137?????????///?<returns></returns>138?????????public?static?DataPageList<N>?Create<N>(System.Linq.IQueryable?Query,?int?IndexPage,?int?PageSize)139?????????{140?????????????System.Linq.IQueryable<N>?query?=?(System.Linq.IQueryable<N>)?Query;141?????????????return?new?DataPageList<N>(query,?IndexPage,?PageSize);142?????????}143?144?????????//public?static?DataPageList<N>?Create<N>(System.Linq.IQueryable?Query,?int?IndexPage,?int?PageSize)145?????????//{146?????????//????return?Create<N>(Query,?IndexPage,?PageSize);147?????????//}148?149?????????/**/150?151?????????///?<summary>152?????????///?更新數據153?????????///?</summary>154?????????public?virtual?void?Update()155?????????{156?????????????allRecordCount?=?query.Count();157?????????????PageAttrList.Clear();158?????????????if?(pageSize?>?0)159?????????????{160?????????????????query?=?query.Skip((indexPage?-?1)?*?pageSize).Take(pageSize);161?????????????????thisPageRecordCount?=?query.Count();162?????????????????//計算分頁結果163?????????????????pageCount?=?(allRecordCount%pageSize?==?0)???(allRecordCount/pageSize)?:?allRecordCount/pageSize?+?1;164?????????????????if?(indexPage?>?1)?canFirstPage?=?true;165?????????????????canPrevPage?=?true;166?????????????????if?(indexPage?<?pageCount)?canNextPage?=?true;167?????????????????canLastpage?=?true;168?????????????}169?????????????else170?????????????{171?????????????????thisPageRecordCount?=?allRecordCount;172?????????????????pageCount?=?indexPage?=?1;173?????????????????canFirstPage?=?canPrevPage?=?canNextPage?=?canLastpage?=?false;174?????????????}175?????????????for?(var?cur?=?1;?cur?<=?pageCount;?cur++)176?????????????{177?????????????????PageAttrList.Add(new?PageAttr?{Page?=?cur});178?????????????}179?????????????listValue?=?query.ToList();180?????????}181?182?????????/**/183?184?????????///?<summary>185?????????///?實現枚舉接口,不過返回的是object186?????????///?</summary>187?????????///?<returns></returns>188?????????public?IEnumerator?GetEnumerator()189?????????{190?????????????return?listValue.GetEnumerator();191?????????}192?193?????????#endregion194?????}195?}
?
3.Entity
這里面打算放的是一些額外的數據字段,例如一些方法的參數集合、公共的JSON返回格式等
Prompt.cs就是返回JSON格式的
?1?using?System.Collections.Generic;?2?using?LitJson;?3?namespace?QuyouCore.Core.Entity?4?{?5?????public?class?Prompt?6?????{?7?????????public?int?Number?8?????????{?9?????????????get;?set;10?????????}11?12?????????public?string?Msg13?????????{14?????????????get;15?????????????set;16?????????}17?18?????????public?static?string?ToJson(int?number,?string?msg)19?????????{20?????????????var?prompt?=?new?Prompt?{Number?=?number,?Msg?=?msg};21?????????????return?JsonMapper.ToJson(prompt);22?????????}23?24?????????public?static?string?ToJson<T>(int?number,?string?msg,?List<T>?data)25?????????{26?????????????var?prompt?=?new?PromptTemplate<T>?{?Number?=?number,?Msg?=?msg,?DataList?=?data?};27?????????????return?JsonMapper.ToJson(prompt);28?????????}29?????}30?}
?
4.Enum
這里放的是一些數據字典
namespace?QuyouCore.Core.Enum {????public?class?EnumLog{????????public?enum?Level{Fatal?=?1,Error?=?2,Warn?=?3,Debug?=?4,Info?=?5}} }
?
5.Service
這里面放了一些業務邏輯,比如根據條件查詢等,因為打算在API、Web、Wap上面共用代碼,所以就想把一些通用的邏輯整合在一起,這里用到了一種單例模式,使用的工具是StructureMap
?1?using?System.Collections.Generic;?2?using?Lasy.Validator;?3?using?QuyouCore.Core.Entity;?4?using?QuyouCore.Core.Enum;?5?using?StructureMap;?6??7?namespace?QuyouCore.Core.Service.Impl?8?{?9?????public?abstract?class?BaseService10?????{11?????????protected?abstract?IContainer?ConfigureDependencies();//單例配置化12?????????13?????????protected?string?PromptToJson(int?prompt)14?????????{15?????????????return?Prompt.ToJson(prompt,?EnumCommon.GetPrompt()[prompt]);16?????????}17?18?????????protected?string?PromptToJson<T>(int?prompt,?List<T>?dataList)19?????????{20?????????????return?Prompt.ToJson(prompt,?EnumCommon.GetPrompt()[prompt],?dataList);21?????????}22?23?????????///?<summary>24?????????///?用Attribute做字段驗證25?????????///?</summary>26?????????///?<typeparam?name="T"></typeparam>27?????????///?<param?name="dict"></param>28?????????///?<returns></returns>29?????????protected?string?ValidateParameters<T>(Dictionary<string,?object>?dict)30?????????{31?????????????var?validator?=?new?Validator(typeof(T));32?????????????if?(!validator.Validate(dict).BoolResult)33?????????????{34?????????????????return?validator.Validate(dict).ErrorStringWithoutFormat;35?????????????}36?????????????return?string.Empty;37?????????}38?????}39?}
?1?using?System.Collections.Generic;?2?using?QuyouCore.Core.DataAccess;?3?using?QuyouCore.Core.DataAccess.Impl;?4?using?QuyouCore.Core.Domain;?5?using?StructureMap;?6?using?QuyouCore.Core.Util;?7?namespace?QuyouCore.Core.Service.Impl?8?{?9?????public?class?KeywordService?:?BaseService,?IKeywordService10?????{11?????????protected?override?IContainer?ConfigureDependencies()12?????????{13?????????????return?new?Container(x?=>14?????????????{15?????????????????x.For<IKeywordTypeRepository>().Use<KeywordTypeRepository>();16?????????????????x.For<IKeywordRepository>().Use<KeywordRepository>();17?????????????});18?????????}19?????????private?IKeywordTypeRepository?InitKeywordTypeRepository()20?????????{21?????????????var?container?=?ConfigureDependencies();22?????????????return?container.GetInstance<IKeywordTypeRepository>();23?????????}24?????????private?IKeywordRepository?InitKeywordRepository()25?????????{26?????????????var?container?=?ConfigureDependencies();27?????????????return?container.GetInstance<IKeywordRepository>();28?????????}29?30?????????public?string?Insert(tb_Keyword?data)31?????????{32?????????????var?keywordRepository?=?InitKeywordRepository();33?????????????var?result?=?keywordRepository.Insert(data);34?????????????return?PromptToJson(result?>?0???Const.PromptSuccess?:?Const.PromptFailure);35?????????}36?37?????????public?string?Update(tb_Keyword?data)38?????????{39?????????????var?keywordRepository?=?InitKeywordRepository();40?????????????keywordRepository.Update(data);41?????????????return?PromptToJson(Const.PromptSuccess);42?????????}43?44?????????public?string?Delete(int?id)45?????????{46?????????????var?keywordRepository?=?InitKeywordRepository();47?????????????keywordRepository.Delete(id);48?????????????return?PromptToJson(Const.PromptSuccess);49?????????}50?51?????????public?string?GetSelectedKeywords(tb_KeywordType?data)52?????????{53?????????????var?typeRepository?=?InitKeywordTypeRepository();54?????????????var?keywordRepository?=?InitKeywordRepository();55?56?????????????data.Active?=?true;57?????????????data.ParentTypeId?=?0;58?????????????//根據線路類型?版塊?類別查詢出關鍵字類別59?????????????var?allTypes?=?new?List<tb_KeywordType>();?//一級?二級的關鍵字類別?現在只分到二級?TODO60?????????????var?types?=?typeRepository.GetSelectedTypesByParentId(data);61?????????????foreach?(var?tbKeywordType?in?types)62?????????????{63?????????????????allTypes.Add(tbKeywordType);64?????????????????data.ParentTypeId?=?tbKeywordType.KeywordTypeId;65?????????????????var?children?=?typeRepository.GetSelectedTypesByParentId(data);66?????????????????if?(children.Count?<=?0)?continue;67?????????????????allTypes.AddRange(children);68?????????????}69?70?????????????//查詢關鍵字內容71?????????????//var?allKeywords?=?new?List<tb_Keyword>();72?????????????var?allKeywords?=?new?List<tb_KeywordType>();73?????????????var?condition?=?new?tb_Keyword?{Active?=?true};74?????????????foreach?(var?tbKeywordType?in?allTypes)75?????????????{76?????????????????//allKeywords.Add(new?tb_Keyword77?????????????????//{78?????????????????//????KeywordTypeName?=?tbKeywordType.Name,79?????????????????//????IsKeywordType?=?true,80?????????????????//????Pinyin?=?string.Empty,81?????????????????//????Name?=?string.Empty82?????????????????//});83?????????????????condition.KeywordTypeId?=?tbKeywordType.KeywordTypeId;84?????????????????var?keywords?=?keywordRepository.GetKeywordsByTypeId(condition);85?????????????????if?(keywords.Count?<=?0)86?????????????????{87?????????????????????allKeywords.Add(tbKeywordType);88?????????????????????continue;89?????????????????}90?????????????????tbKeywordType.Keywords?=?keywords;91?????????????????allKeywords.Add(tbKeywordType);92?????????????}93?????????????return?PromptToJson(Const.PromptSuccess,?allKeywords);94?????????}95?????}96?}
?
6.Util
主要放些小工具類,比如Log寫工具、cookie操作、圖片壓縮類等
?
Tests文件類庫
健壯的代碼是需要有單元測試來做保障的,所以單元測試必不可少。用到的工具是NUnit,測試的點可以發揮大家的想象力。怎么測都行。
?
?1?using?System;?2?using?NUnit.Framework;?3?using?QuyouCore.Core.DataAccess;?4?using?QuyouCore.Core.DataAccess.Impl;?5?using?QuyouCore.Core.Domain;?6?using?StructureMap;?7??8?namespace?QuyouTests.core.DataAccess?9?{10?????[TestFixture]11?????public?class?KeywordRepositoryTest12?????{13?????????private?IKeywordRepository?_keywordModel;14?15?????????[TestFixtureSetUp]16?????????public?void?Init()17?????????{18?????????????var?container?=?new?Container(x?=>?x.For<IKeywordRepository>().Use<KeywordRepository>());19?????????????_keywordModel?=?container.GetInstance<IKeywordRepository>();20?????????}21?22?????????[Test]23?????????public?void?TestInsert()24?????????{25?????????????var?data?=?new?tb_Keyword26?????????????{27?????????????????KeywordTypeId?=?1,28?????????????????Name?=?"塔里木",29?????????????????AddTime?=?DateTime.Now,30?????????????????Pinyin?=?"talimu",31?????????????????Active?=?true32?????????????};33?????????????var?result?=?_keywordModel.Insert(data);34?????????????Assert.Greater(result,?0);35?????????}36?37?????????[Test]38?????????public?void?TestUpdate()39?????????{40?????????????var?data?=?new?tb_Keyword41?????????????{42?????????????????KeywordId?=?1,43?????????????????KeywordTypeId?=?2,44?????????????????Name?=?"莫干山",45?????????????????Pinyin?=?"moganshan"46?????????????};47?????????????_keywordModel.Update(data);48?????????}49?50?????????[Test]51?????????public?void?TestDelete()52?????????{53?????????????_keywordModel.Delete(1);54?????????}55?????}56?}
?
Quyou文件夾
這里就是與頁面操作的代碼,腳本、CSS等都在里面
Presenter文件夾里面的類是用于操作界面邏輯,以及過濾傳過來的數據
??1?using?System;??2?using?NPinyin;??3?using?Quyou.admin.Interface;??4?using?QuyouCore.Core.Domain;??5?using?QuyouCore.Core.Entity;??6?using?QuyouCore.Core.Service;??7?using?QuyouCore.Core.Service.Impl;??8?using?QuyouCore.Core.Util;??9?using?StructureMap;?10?using?System.Collections.Generic;?11??12?namespace?Quyou.admin.Presenter?13?{?14?????public?class?KeywordAjaxPresenter?:?BasePresenter,?IKeywordAjaxPresenter?15?????{?16?????????protected?override?IContainer?ConfigureDependencies()?17?????????{?18?????????????return?new?Container(x?=>?19?????????????{?20?????????????????x.For<IKeywordTypeService>().Use<KeywordTypeService>();?21?????????????????x.For<IKeywordService>().Use<KeywordService>();?22?????????????});?23?????????}?24??25?????????private?IKeywordTypeService?InitKeywordTypeService()?26?????????{?27?????????????var?container?=?ConfigureDependencies();?28?????????????return?container.GetInstance<IKeywordTypeService>();?29?????????}?30??31?????????private?IKeywordService?InitKeywordService()?32?????????{?33?????????????var?container?=?ConfigureDependencies();?34?????????????return?container.GetInstance<IKeywordService>();?35?????????}?36??37?????????private?string?ValidInsertOrUpdate(KeywordTypetData?input)?38?????????{?39?????????????input.PlayClass?=?FilterParamters(input.PlayClass);?40?????????????input.PlayModel?=?FilterParamters(input.PlayModel);?41?????????????input.PlayType?=?FilterParamters(input.PlayType);?42?????????????input.Name?=?FilterParamters(input.Name);?43?????????????input.Sort?=?FilterParamters(input.Sort);?44?????????????input.ParentTypeId?=?FilterParamters(input.ParentTypeId);?45?????????????var?dict?=?new?Dictionary<string,?object>?46?????????????{?47?????????????????{"PlayClass",?input.PlayClass},?48?????????????????{"PlayModel",?input.PlayModel},?49?????????????????{"PlayType",?input.PlayType},?50?????????????????{"Name",?input.Name},?51?????????????????{"Sort",?input.Sort},?52?????????????????{"ParentTypeId",?input.ParentTypeId}?53?????????????};?54?????????????if?(!string.IsNullOrEmpty(input.KeywordTypeId))?55?????????????{?56?????????????????input.KeywordTypeId?=?FilterParamters(input.KeywordTypeId);?57?????????????????dict.Add("KeywordTypeId",?input.KeywordTypeId);?58?????????????}?59?????????????return?ValidateParameters<KeywordTypetData>(dict);?60?????????}?61?????????public?string?InsertKeywordType(KeywordTypetData?input)?62?????????{?63?????????????var?valid?=?ValidInsertOrUpdate(input);?64?????????????if?(valid.Length?>?0)?65?????????????????return?valid;?66??67?????????????var?keywordType?=?new?tb_KeywordType?68?????????????{?69?????????????????PlayClass?=?int.Parse(input.PlayClass),?70?????????????????PlayModel?=?int.Parse(input.PlayModel),?71?????????????????PlayType?=?int.Parse(input.PlayType),?72?????????????????Name?=?input.Name,?73?????????????????AddTime?=?DateTime.Now,?74?????????????????Sort?=?int.Parse(input.Sort),?75?????????????????ParentTypeId?=?int.Parse(input.ParentTypeId),?76?????????????????Active?=?true?77?????????????};?78??????????????79?????????????var?keywordTypeService?=?InitKeywordTypeService();?80?????????????return?keywordTypeService.Insert(keywordType);?81?????????}?82??83?????????///?<summary>?84?????????///?修改關鍵字類別?85?????????///?</summary>?86?????????///?<param?name="input"></param>?87?????????///?<returns></returns>?88?????????public?string?EditKeywordType(KeywordTypetData?input)?89?????????{?90?????????????var?valid?=?ValidInsertOrUpdate(input);?91?????????????if?(valid.Length?>?0)?92?????????????????return?valid;?93??94?????????????var?keywordType?=?new?tb_KeywordType?95?????????????{?96?????????????????KeywordTypeId?=?int.Parse(input.KeywordTypeId),?97?????????????????PlayClass?=?int.Parse(input.PlayClass),?98?????????????????PlayModel?=?int.Parse(input.PlayModel),?99?????????????????PlayType?=?int.Parse(input.PlayType),100?????????????????Name?=?input.Name,101?????????????????Sort?=?int.Parse(input.Sort),102?????????????????ParentTypeId?=?int.Parse(input.ParentTypeId)103?????????????};104?105?????????????var?keywordTypeService?=?InitKeywordTypeService();106?????????????return?keywordTypeService.Update(keywordType);107?????????}108?109?????????///?<summary>110?????????///?刪除關鍵字類別111?????????///?</summary>112?????????///?<param?name="input"></param>113?????????///?<returns></returns>114?????????public?string?DelKeywordType(KeywordTypetData?input)115?????????{116?????????????input.KeywordTypeId?=?FilterParamters(input.KeywordTypeId);117?????????????var?dict?=?new?Dictionary<string,?object>118?????????????{119?????????????????{"KeywordTypeId",?input.KeywordTypeId}120?????????????};121?????????????var?valid?=?ValidateParameters<KeywordTypetData>(dict);122?????????????if?(valid.Length?>?0)123?????????????????return?valid;124?????????????var?keywordTypeService?=?InitKeywordTypeService();125?????????????return?keywordTypeService.Delete(int.Parse(input.KeywordTypeId));126?????????}127?128?????????///?<summary>129?????????///?添加關鍵字130?????????///?</summary>131?????????///?<param?name="input"></param>132?????????///?<returns></returns>133?????????public?string?InsertKeyword(KeywordtData?input)134?????????{135?????????????input.KeywordTypeId?=?FilterParamters(input.KeywordTypeId);136?????????????input.Name?=?FilterParamters(input.Name);137?138?????????????var?dict?=?new?Dictionary<string,?object>139?????????????{140?????????????????{"KeywordTypeId",?input.KeywordTypeId},141?????????????????{"Name",?input.Name}142?????????????};143?????????????var?valid?=?ValidateParameters<KeywordtData>(dict);144?????????????if?(valid.Length?>?0)145?????????????????return?valid;146?147?????????????var?keyword?=?new?tb_Keyword148?????????????{149?????????????????KeywordTypeId?=?int.Parse(input.KeywordTypeId),150?????????????????Name?=?input.Name,151?????????????????AddTime?=?DateTime.Now,152?????????????????Pinyin?=?Pinyin.GetPinyin(input.Name),153?????????????????Active?=?true154?????????????};155?156?????????????var?keywordService?=?InitKeywordService();157?????????????return?keywordService.Insert(keyword);158?????????}159?160?????????///?<summary>161?????????///?修改關鍵字162?????????///?</summary>163?????????///?<param?name="input"></param>164?????????///?<returns></returns>165?????????public?string?EditKeyword(KeywordtData?input)166?????????{167?????????????input.KeywordId?=?FilterParamters(input.KeywordId);168?????????????input.KeywordTypeId?=?FilterParamters(input.KeywordTypeId);169?????????????input.Name?=?FilterParamters(input.Name);170?171?????????????var?dict?=?new?Dictionary<string,?object>172?????????????{173?????????????????{"KeywordTypeId",?input.KeywordTypeId},174?????????????????{"Name",?input.Name},175?????????????????{"KeywordId",?input.KeywordId}176?????????????};177?????????????var?valid?=?ValidateParameters<KeywordtData>(dict);178?????????????if?(valid.Length?>?0)179?????????????????return?valid;180?181?????????????var?keyword?=?new?tb_Keyword182?????????????{183?????????????????KeywordId?=?int.Parse(input.KeywordId),184?????????????????KeywordTypeId?=?int.Parse(input.KeywordTypeId),185?????????????????Name?=?input.Name,186?????????????????Pinyin?=?Pinyin.GetPinyin(input.Name),187?????????????};188?189?????????????var?keywordService?=?InitKeywordService();190?????????????return?keywordService.Update(keyword);191?????????}192?193?????????///?<summary>194?????????///?刪除關鍵字195?????????///?</summary>196?????????///?<param?name="input"></param>197?????????///?<returns></returns>198?????????public?string?DelKeyword(KeywordtData?input)199?????????{200?????????????input.KeywordId?=?FilterParamters(input.KeywordId);201?????????????var?dict?=?new?Dictionary<string,?object>202?????????????{203?????????????????{"KeywordId",?input.KeywordId}204?????????????};205?????????????var?valid?=?ValidateParameters<KeywordtData>(dict);206?????????????if?(valid.Length?>?0)207?????????????????return?valid;208?????????????var?keywordService?=?InitKeywordService();209?????????????return?keywordService.Delete(int.Parse(input.KeywordId));210?????????}211?212?????????///?<summary>213?????????///?獲取關鍵字列表214?????????///?</summary>215?????????///?<param?name="input"></param>216?????????///?<returns></returns>217?????????public?string?GetKeywords(KeywordTypetData?input)218?????????{219?????????????int?playClass,?playModel,?playType;220?????????????int.TryParse(input.PlayClass,?out?playClass);221?????????????int.TryParse(input.PlayModel,?out?playModel);222?????????????int.TryParse(input.PlayType,?out?playType);223?????????????var?keywordType?=?new?tb_KeywordType224?????????????{225?????????????????PlayClass?=?playClass,226?????????????????PlayModel?=?playModel,227?????????????????PlayType?=?playType228?????????????};229?????????????var?keywordService?=?InitKeywordService();230?????????????return?keywordService.GetSelectedKeywords(keywordType);231?????????}232?233?????????///?<summary>234?????????///?顯示錯誤信息的JSON提示235?????????///?</summary>236?????????///?<returns></returns>237?????????public?string?ShowErrorJson()238?????????{239?????????????return?PromptToJson(Const.PromptFailure);240?????????}241?????}242?}
?
?
?
Linqer下載:
Linqer.rar
結構可以在這里下載,代碼都是不能運行的,主要就是展示下結構
演示結構.rar
轉載于:https://blog.51cto.com/12883930/1923695