• 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管理类初始化(加载)。。。

    数据操作实现类初始化(加载)。。。

    等等

    实现示例:

     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     }
    View Code
    1   public class ThemeProxyCollection : Collection<IThemeProxy>
    2     {
    3 
    4     }
    View Code
    1  public class ThemeProxies
    2     {
    3         public static ThemeProxyCollection Proxies = new ThemeProxyCollection() { 
    4            new  DefaultThemeProxy()
    5         };
    6     }
    View Code

            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     }
    View Code
     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     }
    View Code
     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     }
    View Code

            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(经验丰富的架构,产品人发的文章)

  • 相关阅读:
    [JSOI2007]文本生成器 --- AC自动机 + DP
    [POI2000]病毒 --- AC自动机
    [HNOI2011]数学作业 --- 矩阵优化
    [BZOJ4245][ONTAK2015]OR-XOR(贪心)
    [BZOJ4247]挂饰(DP)
    [BZOJ4032][HEOI2015]最短不公共子串(Trie+DP)
    [BZOJ4028][HEOI2015]公约数数列(分块)
    [BZOJ4027][HEOI2015]兔子与樱花(贪心)
    [BZOJ4004][JLOI2015]装备购买(贪心+线性基)
    [HDU5029]Relief grain(树链剖分+线段树)
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/3838651.html
Copyright © 2020-2023  润新知