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你在忙什麽,你将在你的未来收获什么。】,你是否能达到每天这样做,从毕业一直到离开这个行业,业务时间一直把程序作为你的爱好,它是否在业余时间能成为能让你充实的东西)

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      }

皮肤管理示例:

  

 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行文规范,缓存分配合理,内存占用合理。

本人学术短浅,还是希望更牛的朋友们给点架构方面的建议,意见。

c#项目架构搭建经验

时间: 2024-10-28 20:56:45

c#项目架构搭建经验的相关文章

项目架构搭建之UI层的搭建

12.项目架构搭建之WebHelper搭建 BLLSessionFactory 实现IBLL层中的IBLLSessionFactory接口 OpaerateContext 定义常用的常量 使用日志助手实例,帮助记录日志 在构造函数中通过反射获取BLLSession实例,获取service层的各个接口 使用单例模式访问OperateContext 13.项目架构搭建之Web搭建 创建MVC Web项目 新建区域 配置路由 当应用程序中使用到区域时,为避免命名空间内的控制器命名冲突,一般需要设置区域

大型项目架构搭建_高内聚、低耦合(1)

软件开发中的项目的架构的终极目标就六个字: 高内聚.低耦合. 架构搭建好了,后期可维护性才干提高,在这基础上,假设还想提高项目的高效性,就仅仅能从算法着手 假设项目中算法都已经做到极致了,还想提高项目的高效性,怎么办?(算法并不一定能处理高并发的问题) 就要用到中间件的技术了 以下我就从这三方面来搭建一个项目 假设我们有个这么需求 我公式和YC公式合作,开发一个项目.这个项目功能是用来測量东西的一个项目,我们公式在存储数据方面做得好,YC公司所以要和我们合作.要我们做一个对数据进行保存的容器,他

Android项目架构搭建

1. 前言 安卓属于小团队开发,架构的重要性在很多公司其实不是那么的明显,加上现在的开源框架层出不穷,更好的帮助我们上手android项目的开发.我前两年也在公司主导过项目开发,搭建过不少项目,以前主要的倾向是MVC,导致了activity/fragment过大,而且很多公共功能杂乱在项目中,后期维护起来不方便,最近刚好有时间,重新搭建了一个新的框架.(ps:有建议或者更好想法的可以留言.) 2. 用到的知识点: UI--面向对象 数据交互--MVP模式 数据库--GreenDao 网络图片加载

微服务SpringCloud项目架构搭建入门

Spring的微服务框架SpringCloud受到众多公司欢迎,给大家带来一篇框架搭建入门.本次采用的版本是Spring Cloud版本为Finchley.RELEASE. 一.SpringCloud项目简介 spring cloud: 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运行环境简单,可以在开发人员的电脑上跑. Spring Boot: 旨在简化创建产品级的 Spring 应用和服务,简化了配

Spring3+Hibernate4+SpringMVC整合Ext:项目架构搭建

前言 前段时间突然想用SpringMVC结合Ext做一个框架原型,整合后发现SpringMVC配合Ext简直天衣无缝,当然SpringMVC结合别的UI框架应该也是天衣无缝的.SpringMVC比Struts2确实要强大很多,特别对于Ext框架JSON数据的完美支撑,开发起来相当舒服.Spring3整合Hibernate4的时候可能有点问题,跟Spring2+Hibernate3有很大的区别,区别在于Hibernate4实现了对事务的管理,所以Spring针对Hibernate4就没有提供Hib

(三) Angular2项目框架搭建心得

前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2.*版本的面目全非,不过宽容点来看这个强大的框架,升级到ng2肯定是一件好事情,虽然截至目前ng2还存在或多或少需要完善的地方,但是ng2做到了留下并强化ng1好的部分,移除或改善其不好的部分,并且基于许多较新Web技术来开发,不去看从ng1迁移到ng2的门槛和工作量的话,ng2的编程体验是很酷炫的. 目前n

Django (九) 项目开发流程&amp;项目架构

项目开发流程&项目架构 1. 软件开发的一般流程 1. 需求分析及确认: 由需求分析工程师与客户确认甚至挖掘需求.输出需求说明文档. ? 2. 概要设计及详细设计: 开发对需求进行概要设计,包括系统的基本处理流程,组织结构.模块划分.接口设计.数据库结构设计等.然后在概要设计的基础上进行详细设计.详细设计中描述实现具体模块所涉及到的主要算法.数据结构.类的层次结构及调用关系,需要说明软件系统各个层次中的每一个程序(每个模块或子程序)的设计考虑,以便进行编码和测试.基本达到伪代码的层面. (原型图

JAVA架构师之SpringBoot,SpringCloud构建微服务项目架构

springcloud微服务项目架构搭建第一天(一).项目简介1.准备工作:idea创建springboot模板 2.后台应该涉及的技术(后期可能会有删改) Spring Framework 容器SpringMVC MVC框架Apache Shiro 安全框架Spring session 分布式Session管理MyBatis ORM框架MyBatis Generator 代码生成PageHelper MyBatis物理分页插件Druid 数据库连接池FluentValidator 校验框架Th

Asp.net mvc项目架构分享系列之架构搭建初步

copy to:http://www.cnblogs.com/ben121011/p/5014795.html 项目架构各部分解析 Core Models IDAL MSSQLDAL IBLL BLL WebHelper Web AdminLogic 5.项目架构初步搭建 1)      创建一个空白解决方案 2)     添加解决方案文件夹,初步分层UI.Service.Repository.Infrastructure 3)     创建项目(除Web项目外,其他均创建为类库项目) a)