讀過.Net項目中感受代碼寫的不錯(備註1)有:bbsMax(惋惜唧唧喳喳鳥像消失了同樣),Umbraco(國外開源的cms項目),Kooboo(國內作開源cms)。本人狹隘,讀的代碼很少,範圍也不普遍。javascript
你是否一直渴望本身能開發出一套系統架構,讓人讀起來感受到程序有條理,結構很合理。html
1.項目經驗豐富。(應該是從一堆堆項目中走出來的,豐富的經驗比大篇大論的理論更深入。)java
2.知識的全面性,基礎的紮實程度。(知識的全面性不要求你什麼都知道,起碼要能熟練掌握WCF,Silerlight,WebService,WindowService,Asp.net,WinForm,Asp.net Mvc,ORM(Entity Framework,Linq,NHibernate)DI/IOC(Autofac,Unity,Cast),Javascript(javascript能本身封裝類庫,很熟練jquery),Ajax(js幫助方式,AjaxPanel),OAuth(Open Identity),OData等)jquery
3.會從不一樣的角度去了解問題。(但沒必要什麼語言都懂,起碼你不能只懂一種技術,當你去讀不一樣語言實現的架構時會給你帶來不同的感受,處理事情的方式。好比:Django,或者Ruby On Rails,可讓你能瞭解到MVC架構的真諦,在讀Java的struts的感受又是不一樣的感受)算法
4.熟練應用的設計模式。(行爲模型,結構模式,建立型模式)sql
5.對程序有濃厚的興趣。(若是你只把程序看成換取收入的一種技能,估計很難成爲資深級別;業餘時間【晚上8:00到10:00你在忙什麼,你將在你的將來收穫什麼。】(備註2),你是否能達到天天這樣作,從畢業一直到離開這個行業,業務時間一直把程序做爲你的愛好,它是否在業餘時間能成爲能讓你充實的東西)c#
6.理科是否優秀。(無論你信不信,若是你理科很差,計算機技術你成爲高手會很漫長)設計模式
1.Boot.cs,它應該在工程中出如今什麼位置,它能作什麼事情。緩存
配置信息管理類的初始化(加載)。。。架構
系統信息管理類的初始化(加載)。。。
業務訂閱實現的初始化(加載)。。。
系統適配管理類初始化(加載)。。。
模版引擎初始化(加載)。。。
theme管理類初始化(加載)。。。
plugin管理類初始化(加載)。。。
widget管理類初始化(加載)。。。
數據操做實現類初始化(加載)。。。
等等
實現示例:
1 protected void Application_BeginRequest(object sender, EventArgs e) 2 { 3 if (false == hasInit) 4 { 5 lock (locker) 6 { 7 if (false == hasInit) 8 { 9 // 第一次HttpApplicaiton初始實例化時,啓動Boot類中全局靜態型變量信息 10 // AllEnums初始化:包含Enum屬性,字段,註解信息,避免每次使用enum上下文信息時都動態建立; 11 // AllSettings初始化:避免全局惟一配置管理類屢次初始化,保證應用程序池中保留一份對象實例 12 // 配置信息管理類的初始化(加載)。。。 13 // 系統信息管理類的初始化(加載)。。。 14 // 業務訂閱實現的初始化(加載)。。。 15 // 系統適配管理類初始化(加載)。。。 16 // 模版引擎初始化(加載)。。。 17 // theme管理類初始化(加載)。。。 18 // plugin管理類初始化(加載)。。。 19 // widget管理類初始化(加載)。。。 20 // 數據操做實現類初始化(加載)。。 21 Boot.Init(); 22 } 23 } 24 } 25 26 // 每次http請求開始時,都須要初始化http上下文包裝類 27 AppContext.Init(); 28 。。。。。。 29 } 30 31 /// <summary> 32 /// 啓動時 33 /// </summary> 34 public class Boot 35 { 36 /// <summary> 37 /// 初始化。。。 38 /// </summary> 39 public static void Init() 40 { 41 // 全局系統變量加載 42 Globals.Init(); 43 44 // 全局惟一配置信息加載 45 SettingsManager.Init(); 46 47 // 全局Enums上下文加載 48 AllEnums.Init(); 49 // 全局配置信息
AllSettings.Init(); 50 // 初始化Theme代理實現類 51 ThemeProxies.Proxies.Clear(); 52 ThemeProxies.Proxies.Add(new DefaultThemeProxy()); 53 。。。。。。 54 } 55 }
皮膚管理示例:
1 public interface IThemeProxy 2 { 3 List<Theme> Load(); 4 5 List<TemplateInfo> Load(string dir); 6 7 string Load(string file); 8 9 Theme GetDefault(); 10 11 void SetDefault(Theme theme); 12 13 void Delete(Theme theme); 14 15 void Upload(Theme theme); 16 17 void Save(string file, string fileContext); 18 }
1 public class ThemeProxyCollection : Collection<IThemeProxy> 2 { 3 4 }
1 public class ThemeProxies 2 { 3 public static ThemeProxyCollection Proxies = new ThemeProxyCollection() { 4 new DefaultThemeProxy() 5 }; 6 }
2.AppContext.cs,它扮演什麼角色,它能作什麼事情。
皮膚管理,
錯誤、跟蹤信息處理,
存放、獲取上下文臨時變量,
當前訪問用戶(基本帳戶信息,權限信息),
等等
3.Global.cs(AppRuntime.cs),看到這個類,你能想到它能作什麼,在系統架構中他該扮演什麼做用。
系統參數信息。。。
config配置信息。。。
系統路徑快速獲取幫助函數。。。
4.系統配置,系統常常出現的Enum類型,怎麼管能讓你的系統感受到整潔。
AllEnums.cs來維護全局enum的上下文。。。
AllSettings.cs來維護全局配置信息。。。
等等
1 /// <summary> 2 /// 全局enum對象成員信息管理類 3 /// </summary> 4 public class AllEnums 5 { 6 public AllEnums() 7 { 8 } 9 10 public static EnumInfoCollection CategoriesTypeMembers { get; set; } 11 12 /// <summary> 13 /// 初始化全局enum對象成員信息 14 /// </summary> 15 public static void Init() 16 { 17 CategoriesTypeMembers = EnumUtil.GetEnumItems(typeof(CategoriesType)); 18 19 } 20 }
1 public class EnumInfo : IPrimaryKey<string> 2 { 3 // Methods 4 public string GetKey() 5 { 6 return this.Name; 7 } 8 9 // Properties 10 public string DefaultValue { get; set; } 11 12 public string Description { get; set; } 13 14 public string Name { get; set; } 15 16 public object Value { get; set; } 17 } 18 19 public class EnumInfoCollection : Collection<EnumInfo> 20 { 21 // Methods 22 public EnumInfoCollection() 23 { 24 } 25 26 public EnumInfoCollection(EnumInfoCollection items) 27 { 28 if (items != null) 29 { 30 foreach (EnumInfo info in items) 31 { 32 base.Add(info); 33 } 34 } 35 } 36 }
1 public enum CategoriesType : int 2 { 3 [Description("文章欄目")] 4 [DefaultValue(0)] 5 Article, 6 7 [Description("產品欄目")] 8 [DefaultValue(1)] 9 Product, 10 11 [Description("下載欄目")] 12 [DefaultValue(0)] 13 Dowload, 14 15 [Description("圖片欄目")] 16 [DefaultValue(0)] 17 Images, 18 19 }
1 public class EnumUtil 2 { 3 public static EnumInfoCollection GetEnumItems(Type enumType) 4 { 5 EnumInfoCollection infos = new EnumInfoCollection(); 6 FieldInfo[] fields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly); 7 foreach (FieldInfo info2 in fields) 8 { 9 EnumInfo item = new EnumInfo 10 { 11 Name = info2.Name 12 }; 13 DescriptionAttribute[] customAttributes = (DescriptionAttribute[])info2.GetCustomAttributes(typeof(DescriptionAttribute), true); 14 if ((customAttributes != null) && (customAttributes.Length > 0)) 15 { 16 item.Description = customAttributes[0].Description; 17 } 18 DefaultValueAttribute[] attributeArray2 = (DefaultValueAttribute[])info2.GetCustomAttributes(typeof(DefaultValueAttribute), true); 19 if ((attributeArray2 != null) && (attributeArray2.Length > 0)) 20 { 21 item.DefaultValue = attributeArray2[0].Value as string; 22 } 23 object obj2 = enumType.InvokeMember(info2.Name, BindingFlags.GetField, null, null, null); 24 switch (Enum.GetUnderlyingType(enumType).FullName) 25 { 26 case "System.Int32": 27 item.Value = (int)obj2; 28 break; 29 30 case "System.Int16": 31 item.Value = (short)obj2; 32 break; 33 34 case "System.Byte": 35 item.Value = (byte)obj2; 36 break; 37 38 case "System.UInt16": 39 item.Value = Convert.ToInt32((ushort)obj2); 40 break; 41 42 case "System.UInt32": 43 item.Value = (int)obj2; 44 break; 45 46 case "System.UInt64": 47 item.Value = (int)obj2; 48 break; 49 } 50 infos.Add(item); 51 } 52 return infos; 53 } 54 55 public static bool TryParse<T>(string memberName, out T t) where T : struct 56 { 57 t = default(T); 58 return (!memberName.IsNullOrEmpty() && Enum.TryParse<T>(memberName, true, out t)); 59 } 60 61 }
5.數據操做類,能怎麼處理讓DataAccess層更規範。
6.Plugin怎麼管理。
7.Widgets怎麼管理。
8.你是否還在死守Dao,Business,Web,Entity(Model)這樣的分層結構,這種從Foosun.Net(cms),PetShop流傳出來的結構,是否毒害了你對程序的結構的創想。
9.Template Engin,你是否嘗試去處理實現過,請拋棄NVelocity帶給你的毒害。是可否從Discuzz!NT中得到點靈感。或者Asp.net mvc模版運行原理你是否清晰,實現原理是否能找到核心代碼實現處。
10. 僞靜態,原理,實現。是否嘗試過用。
11. 靜態HTML生成系統你是否嘗試用,本身是否嘗試過寫。
12. 接口類,抽象類,實現類,管理類,代理類,建立型類,行爲型類,裝飾型類,實體型類,枚舉類等,你是否在程序建立類時對他們命名,文件存放位置,結構劃分有過深思熟慮。
備註1:
什麼代碼算上好:
1,代碼書寫規範;
2,代碼結構合理;
3,代碼變量,函數,類,命名空間,項目名稱規範;
4,代碼註釋完整;
5,對靜態接口類,抽象類等使用的地道。
6,設計模式,用的典型,經典。
7,代碼執行效率高,算法優。
8,數據訪問處理恰當,sql行文規範,緩存分配合理,內存佔用合理。
備註2(但願你們不要誤解):
1.胡適先生畢業典禮講話:「一我的的業餘時間用來作什麼,就決定了他的未來」;
2.愛因斯坦說:「一我的活到六七十歲,大概有13年作工做,有17年是業餘時間,此外是吃飯睡覺的時間。一我的能不能成才,關鍵在於利用你的17年,可以利用業餘時間的人就能成才,不然就不能成才。」
本人學術短淺,仍是但願更牛的朋友們給點架構方面的建議,意見。
看到這個哥們的文章中截圖不錯:
http://www.cnblogs.com/mienreal/tag/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/
積累好文章:http://www.cnblogs.com/mienreal/p/4340864.html(經驗豐富的架構,產品人發的文章)