c#项目架构搭建经验
读过.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管理类初始化(加载)。。。
数据操作实现类初始化(加载)。。。
等等
实现示例:
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (false == hasInit)
{
lock (locker)
{
if (false == hasInit)
{
// 第一次HttpApplicaiton初始实例化时,启动Boot类中全局静态型变量信息
// AllEnums初始化:包含Enum属性,字段,注解信息,避免每次使用enum上下文信息时都动态创建;
// AllSettings初始化:避免全局唯一配置管理类多次初始化,保证应用程序池中保留一份对象实例
// 配置信息管理类的初始化(加载)。。。
// 系统信息管理类的初始化(加载)。。。
// 业务订阅实现的初始化(加载)。。。
// 系统适配管理类初始化(加载)。。。
// 模版引擎初始化(加载)。。。
// theme管理类初始化(加载)。。。
// plugin管理类初始化(加载)。。。
// widget管理类初始化(加载)。。。
// 数据操作实现类初始化(加载)。。
Boot.Init();
}
}
} // 每次http请求开始时,都需要初始化http上下文包装类
AppContext.Init();
。。。。。。
} /// <summary>
/// 启动时
/// </summary>
public class Boot
{
/// <summary>
/// 初始化。。。
/// </summary>
public static void Init()
{
// 全局系统变量加载
Globals.Init(); // 全局唯一配置信息加载
SettingsManager.Init(); // 全局Enums上下文加载
AllEnums.Init();
// 全局配置信息
AllSettings.Init();
// 初始化Theme代理实现类
ThemeProxies.Proxies.Clear();
ThemeProxies.Proxies.Add(new DefaultThemeProxy());
。。。。。。
}
}
皮肤管理示例:

public interface IThemeProxy
{
List<Theme> Load(); List<TemplateInfo> Load(string dir); string Load(string file); Theme GetDefault(); void SetDefault(Theme theme); void Delete(Theme theme); void Upload(Theme theme); void Save(string file, string fileContext);
}
public class ThemeProxyCollection : Collection<IThemeProxy>
{ }
public class ThemeProxies
{
public static ThemeProxyCollection Proxies = new ThemeProxyCollection() {
new DefaultThemeProxy()
};
}
2.AppContext.cs,它扮演什么角色,它能做什么事情。
皮肤管理,
错误、跟踪信息处理,
存放、获取上下文临时变量,
当前访问用户(基本账户信息,权限信息),
等等
3.Global.cs(AppRuntime.cs),看到这个类,你能想到它能做什么,在系统架构中他该扮演什么作用。
系统参数信息。。。
config配置信息。。。
系统路径快速获取帮助函数。。。
4.系统配置,系统经常出现的Enum类型,怎么管能让你的系统感觉到整洁。
AllEnums.cs来维护全局enum的上下文。。。
AllSettings.cs来维护全局配置信息。。。
等等

/// <summary>
/// 全局enum对象成员信息管理类
/// </summary>
public class AllEnums
{
public AllEnums()
{
} public static EnumInfoCollection CategoriesTypeMembers { get; set; } /// <summary>
/// 初始化全局enum对象成员信息
/// </summary>
public static void Init()
{
CategoriesTypeMembers = EnumUtil.GetEnumItems(typeof(CategoriesType)); }
}
public class EnumInfo : IPrimaryKey<string>
{
// Methods
public string GetKey()
{
return this.Name;
} // Properties
public string DefaultValue { get; set; } public string Description { get; set; } public string Name { get; set; } public object Value { get; set; }
} public class EnumInfoCollection : Collection<EnumInfo>
{
// Methods
public EnumInfoCollection()
{
} public EnumInfoCollection(EnumInfoCollection items)
{
if (items != null)
{
foreach (EnumInfo info in items)
{
base.Add(info);
}
}
}
}
public enum CategoriesType : int
{
[Description("文章栏目")]
[DefaultValue()]
Article, [Description("产品栏目")]
[DefaultValue()]
Product, [Description("下载栏目")]
[DefaultValue()]
Dowload, [Description("图片栏目")]
[DefaultValue()]
Images, }
public class EnumUtil
{
public static EnumInfoCollection GetEnumItems(Type enumType)
{
EnumInfoCollection infos = new EnumInfoCollection();
FieldInfo[] fields = enumType.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);
foreach (FieldInfo info2 in fields)
{
EnumInfo item = new EnumInfo
{
Name = info2.Name
};
DescriptionAttribute[] customAttributes = (DescriptionAttribute[])info2.GetCustomAttributes(typeof(DescriptionAttribute), true);
if ((customAttributes != null) && (customAttributes.Length > ))
{
item.Description = customAttributes[].Description;
}
DefaultValueAttribute[] attributeArray2 = (DefaultValueAttribute[])info2.GetCustomAttributes(typeof(DefaultValueAttribute), true);
if ((attributeArray2 != null) && (attributeArray2.Length > ))
{
item.DefaultValue = attributeArray2[].Value as string;
}
object obj2 = enumType.InvokeMember(info2.Name, BindingFlags.GetField, null, null, null);
switch (Enum.GetUnderlyingType(enumType).FullName)
{
case "System.Int32":
item.Value = (int)obj2;
break; case "System.Int16":
item.Value = (short)obj2;
break; case "System.Byte":
item.Value = (byte)obj2;
break; case "System.UInt16":
item.Value = Convert.ToInt32((ushort)obj2);
break; case "System.UInt32":
item.Value = (int)obj2;
break; case "System.UInt64":
item.Value = (int)obj2;
break;
}
infos.Add(item);
}
return infos;
} public static bool TryParse<T>(string memberName, out T t) where T : struct
{
t = default(T);
return (!memberName.IsNullOrEmpty() && Enum.TryParse<T>(memberName, true, out t));
} }
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(经验丰富的架构,产品人发的文章)
c#项目架构搭建经验的更多相关文章
- mvc项目架构搭建之UI层的搭建
项目架构搭建之UI层的搭建 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构各部分解析 5.项目创 ...
- 微服务SpringCloud项目架构搭建入门
Spring的微服务框架SpringCloud受到众多公司欢迎,给大家带来一篇框架搭建入门.本次采用的版本是Spring Cloud版本为Finchley.RELEASE. 一.SpringCloud ...
- angular+require前端项目架构搭建
app //应用入口 directive //自定义指令 require-main //require的主配置文件 存放公共调用的js service //请求后端数据公有类 controllers ...
- mvc项目架构分享系列之架构搭建之Repository和Service
项目架构搭建之Repository和Service的搭建 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4. ...
- mvc项目架构分享系列之架构搭建之Infrastructure
项目架构搭建之Infrastructure的搭建 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构 ...
- mvc项目架构分享系列之架构搭建初步
mvc项目架构分享系列之架构搭建初步 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构各部分解析 ...
- Vue 项目架构设计与工程化实践
来源 文中会讲述我从0~1搭建一个前后端分离的vue项目详细过程 Feature: 一套很实用的架构设计 通过 cli 工具生成新项目 通过 cli 工具初始化配置文件 编译源码与自动上传CDN Mo ...
- Mvc项目架构分享之项目扩展
Mvc项目架构分享之项目扩展 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构各部分解析 5.项目 ...
- Asp.net mvc项目架构分享系列之架构概览
Asp.net mvc项目架构分享系列之架构概览 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构 ...
随机推荐
- Java基础知识点3:集合类
集合类是Java编程中经常会用到的一类常用类库,在这里将会对整个集合类进行介绍: Collection接口: Collection接口是所有集合类的根接口,代表了所有含有多个元素的集合,无论这个集合中 ...
- poj2955 Brackets (区间dp)
题目链接:http://poj.org/problem?id=2955 题意:给定字符串 求括号匹配最多时的子串长度. 区间dp,状态转移方程: dp[i][j]=max ( dp[i][j] , 2 ...
- VirtualBox使用总结
解决VirtualBox安装Mac OS X El Capitan开机卡住问题 在配置完新虚拟机后关闭VirtualBox,用管理员权限启动CMD,转到VirtualBox安装目录,依次运行下列指令: ...
- Gitbook简易教程
简介 GitBook 是一个基于 Node.js 的命令行工具,可使用 Github/Git 和 Markdown 来制作精美的电子书.GitBook支持输出以下几种文档格式 静态站点:GitBook ...
- Spring MVC如何配置OpenSessionInViewInterceptor并结合Hibernate使用
最近在使用Spring MVC开发,在使用Hibernate查询数据库的时候因为Session在DAO层被关闭导致延迟加载的属性在使用时报错,经过查询网上资料将解决方法整理如下: 我使用的是OpenS ...
- css实现水平垂直居中
一.单行文字居中: height: 100px;height: 100px;overflow: hidden; 二.多行内容居中(容器的高度不能固定): padding-top: 24px;paddi ...
- apache配置rewrite及.htaccess文件(转载)
今天看到一个哥们的帖子发了个rewrite的帖子,以前也写过一个,配置挺简单的,但当时没注意这个问题,当时没有用到.htaccess文件,在机子上测试了一下,发现确实没法用,于是开始找问题的所在. 自 ...
- PHP入门介绍与环境配置
浏览目录: 一.PHP的背景和优势: 二.PHP原理简介: 三.PHP运行环境配置: 四.编写简单的PHP代码以及测试. 一.PHP的背景和优势 1.1 什么是PHP? PHP是能让你生成动态网页 ...
- rabbitmq使用心得
因为公司项目需要使用消息中间件,实现相关业务的异步处理,所有选用了rabbitmq.通过看文档,爬过一个一个坑,终于还是实现了相关功能. 直接上配置文件: <?xml version=" ...
- ansible-copy
ansible是执行yaml文件控制远端服务器.执行命令为 ansible-playbook my.yamlplaybook是ansible中的脚本,采用yaml语言.VM1安装ansible,ip地 ...