读过.Net项目中感觉代码写的不错(备注1)有:bbsMax(可惜唧唧喳喳鸟像消失了一样),Umbraco(国外开源的cms项目),Kooboo(国内做开源cms)。本人狭隘,读的代码不多,范围也不广泛。
你是否一直渴望自己能开发出一套系统架构,让人读起来感觉到程序有条理,结构很合理。
好的架构师需要具备:
1.项目经验丰富。(应该是从一堆堆项目中走出来的,丰富的经验比大篇大论的理论更深刻。)
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等)
3.会从不同的角度去了解问题。(但不必什么语言都懂,起码你不能只懂一种技术,当你去读不同语言实现的架构时会给你带来不一样的感觉,处理事情的方式。比如:Django,或者Ruby On Rails,可以让你能了解到MVC架构的真谛,在读Java的struts的感觉又是不同的感觉)
4.熟练应用的设计模式。(行为模型,结构模式,创建型模式)
5.对程序有浓厚的兴趣。(如果你只把程序当作换取收入的一种技能,估计很难成为资深级别;业余时间【晚上8:00到10:00你在忙什麽,你将在你的未来收获什么。】(备注2),你是否能达到每天这样做,从毕业一直到离开这个行业,业务时间一直把程序作为你的爱好,它是否在业余时间能成为能让你充实的东西)
6.理科是否优秀。(不管你信不信,如果你理科不好,计算机技术你成为高手会很漫长)
怎么搭建c#项目架构像计算机一样运行的计算机
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 } |