网站开发和大数据开发区别,怎样才能做一个优质的外贸网站,常州网站建设书生商友,网页制作价格私活前面两边的代码就是一套初步的工具包架构#xff0c;基本底层通用#xff0c;可以移植到任意项目实现类似的需求。接下来#xff0c;再在我们特定的项目几微助手里面再实现一套基于自己项目的基类#xff0c;根据项目需求抽象一下项目内的常用方法。理论上#xff0c;这一… 前面两边的代码就是一套初步的工具包架构基本底层通用可以移植到任意项目实现类似的需求。接下来再在我们特定的项目几微助手里面再实现一套基于自己项目的基类根据项目需求抽象一下项目内的常用方法。理论上这一步的抽象如果移植到其他项目应该也是有一定的通用性。112345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455/// summary /// 站点设置的基类基类主要提供站点扩展设置的数据库连接等操作 /// /summary public abstract class BaseSiteExtensions:BaseExtensions { public Guid SiteUnid { get; set; } private MiniSiteDataExtensionsEntities _dataContext null; /// summary /// 数据操作实例 /// /summary public virtual MiniSiteDataExtensionsEntities DataContext { get { if (this._dataContext null) this._dataContext MiniSiteDataExtensionsEntities.GetContext(this.SiteUnid); return this._dataContext; } set { this._dataContext value; } } /// summary /// 站点扩展设置初始化 /// /summary /// param namesiteunid/param public BaseSiteExtensions(Guid siteunid):base() { this.SiteUnid siteunid; } /// summary /// 打开一个数据连接 /// /summary public virtual void OpenConnection() { if (this.DataContext.Database.Connection.State ConnectionState.Closed) this.DataContext.Database.Connection.Open(); } /// summary /// 关闭数据库联机并销毁对象 /// /summary public virtual void CloseConnection() { if (this.DataContext.Database.Connection.State ! ConnectionState.Closed) this.DataContext.Database.Connection.Close(); this.DataContext.Dispose(); this.DataContext null; } }在几微助手里面有站点的概念这里是为站点的扩展配置做一套管理基类。用于管理站点的Key-Value数据库。这里用到的EF数据库实例就是上篇里面的MiniSiteDataExtensionsEntities这里也可以用其它的在表结构相同的情况下通过继承后在实现自己的数据库操作类根据自己的需求来管理EF的数据文件。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282/// summary /// 站点的扩展设置基类 /// /summary public class BaseSiteSettingExtensions:BaseSiteExtensions { public event ItemSaved OnItemSaved; public event AllItemsSaved OnAllItemsSaved; public virtual SettingEditorDictionary EditorItems { get; set; } protected string TypeName { get; set; } /// summary /// 根据指定类型初始化站点扩展设置 /// /summary /// param namesiteunid/param /// param nametypename/param public BaseSiteSettingExtensions(Guid siteunid,string typename):base(siteunid) { this.TypeName typename; } /// summary /// 从数据库读取键值将指定key的设置以泛型方式获取对象的实例 /// /summary /// typeparam nameT对象类型/typeparam /// param namekey配置的键/param /// returns返回配置对象的实例/returns public virtual T GetValueT(string key) { T result default(T); string resthis.GetValue(key); if (!string.IsNullOrWhiteSpace(res)) result JsonConvert.DeserializeObjectT(res); return result; } /// summary /// 获取指定key的扩展设置值 /// /summary /// param namekey设置的键/param /// returns返回值的字符串形式/returns public virtual string GetValue(string key) { return this.GetValue(this.TypeName, key); } /// summary /// 根据key获取指定类型的扩展设置值 /// /summary /// param nametypename设置类型的枚举/param /// param namekey设置的键/param /// returns返回值的字符串形式/returns public virtual string GetValue(string typename,string key) { string result null; if (this.DataContext.SettingExtensions.Count(m m.TypeName typename.ToString() m.Key key.ToLower()) 0) { SettingExtension setting this.DataContext.SettingExtensions.Single(m m.TypeName typename.ToString() m.Key key.ToLower()); result setting.Value; } this.CloseConnection(); return result; } /// summary /// 保存指定键的项 /// /summary /// param namekey需要保存的配置键/param public virtual void SaveItem(string key) { this.SaveItem(this.TypeName, key, this.Items[key.ToLower()]); } /// summary /// 更新或者添加指定键值的单个配置 /// /summary /// param namekey需要保存的配置键/param /// param namevalue/param public virtual void SaveItem(string key, string value) { this.SaveItem(this.TypeName, key, value); } /// summary /// 保存设置项 /// /summary /// param nameitem设置项实/param public virtual void SaveItem(SettingItem item) { this.SaveItem(this.TypeName, item.Key, item.Value); } /// summary /// 保存指定设置类型的设置项目 /// /summary /// param nametypename/param /// param nameitem/param public virtual void SaveItem(string typename, SettingItem item) { this.SaveItem(typename, item.Key, item.Value); } /// summary /// 跟新或添加设置 /// /summary /// param nametypename/param /// param namekey/param /// param namevalue/param public virtual void SaveItem(string typename, string key, string value) { if (this.DataContext.SettingExtensions.Count(m m.TypeName typename.ToString() m.Key key.ToLower()) 0) { SettingExtension setting this.DataContext.SettingExtensions.AsEnumerable().Single(m m.TypeName typename.ToString() m.Key key.ToLower()); setting.Value value; } else { SettingExtension setting new SettingExtension(); setting.SettingID Guid.NewGuid(); setting.TypeName typename.ToString(); setting.Key key.ToLower(); setting.Value String.IsNullOrEmpty(value)?:value; this.DataContext.SettingExtensions.Add(setting); } this.DataContext.SaveChanges(); this.CloseConnection(); this.SetItem(key, value); OnItemSaved?.Invoke(this, key); } /// summary /// 跟新或者新建扩展设置 /// /summary public virtual void SaveAllItems() { this.SaveAllItems(this.Items); } /// summary /// 用自定的配置字典对象批量更新站点设 /// /summary /// param nameitems/param public virtual void SaveAllItems(SettingDictionary items) { this.SaveAllItems(this.TypeName, items); } /// summary /// 批量添加或更新设置 /// /summary /// param nametypename/param /// param nameitems/param public virtual void SaveAllItems(string typename, SettingDictionary items) { foreach (SettingItem kv in items) { try { if (this.DataContext.SettingExtensions.Count(m m.TypeName typename.ToString() m.Key kv.Key.ToLower()) 0) { SettingExtension setting this.DataContext.SettingExtensions.Single(m m.TypeName typename.ToString() m.Key kv.Key.ToLower()); if (setting.Value kv.Value) { continue; } else { setting.Value kv.Value; } } else { SettingExtension setting new SettingExtension(); setting.SettingID Guid.NewGuid(); setting.TypeName typename.ToString(); setting.Key kv.Key.ToLower(); setting.Value String.IsNullOrEmpty(kv.Value) ? : kv.Value; this.DataContext.SettingExtensions.Add(setting); } } catch(Exception e) { SiteLog.Debug(kv.Key,kv.Value); } } this.DataContext.SaveChanges(); this.CloseConnection(); OnAllItemsSaved?.Invoke(this); } /// summary /// 读取数据并通过读取的键值对填充配置的Items属性 /// /summary public virtual void GetItems() { this.GetItems(this.TypeName); } /// summary /// 根据string枚举属性读取数据并通过读取的键值对填充配置的Items属性 /// /summary /// param nametypename/param public virtual void GetItems(string typename) { ListSettingExtension list this.GetSettingExtensions(typename); if (list ! null) { foreach (SettingExtension setting in list) { if (this.Items.ContainsKey(setting.Key.ToLower()) !String.IsNullOrEmpty(setting.Value)) { this.Items[setting.Key.ToLower()] setting.Value; } } } } /// summary /// 获取配置扩展的实例对象列表 /// /summary /// returns返回特定类型的配置对象列表/returns public virtual ListSettingExtension GetSettingExtensions() { return this.GetSettingExtensions(this.TypeName); } /// summary /// 获取指定类型的扩展信息列表 /// /summary /// param nametypename配置类型枚举/param /// returns返回指定类型的配置对象列表/returns public virtual ListSettingExtension GetSettingExtensions(string typename) { ListSettingExtension result null; if (this.DataContext.SettingExtensions.Count(m m.TypeName typename.ToString()) 0) { result this.DataContext.SettingExtensions.Where(m m.TypeName typename.ToString()).ToList(); } this.CloseConnection(); return result; } /// summary /// 解析表单提交的设置并根据表单提交数据对设置重新修改赋值 /// /summary /// param nameform前端UI提交的表单对象/param public virtual void ParseFormSettingValues(FormCollection form) { foreach (SettingItem item in this.Items) { if (this.EditorItems.ContainsKey(item.Key)) { switch (this.EditorItems[item.Key].TagName.ToLower()) { case bool: if (form[item.Key] null) this.SetItembool(item.Key, false); else this.SetItembool(item.Key, bool.Parse(form[item.Key])); break; default: this.SetItem(item.Key, form[item.Key]); break; } } else { if (form[item.Key] null) continue; else this.SetItem(item.Key, form[item.Key]); } } } }BaseSiteSettingExtensions这里是实现一套基于集合的扩展类。第一篇讲的数据表里面我们的Key-Value数据表是有两个的。一个是模块整体的配置一个是模块里面单个对象的设置。这个类就是管理前者。这个就是管理模块单项配置的基类。