zoukankan      html  css  js  c++  java
  • .NET程序员掌握的.NET技术

    从毕业做.NET到现在,有好几年了,自认为只能是达到熟练的水平,谈不上精通。所以,总结一下,自己到底熟练掌握了哪些.NET方面的开发技术,以此对照,看看还有哪些不足,欢迎补充。

    1 .NET Framework常见的API要熟练掌握。有些API可能需要多个类型配合使用,也有必要掌握。

    IEntity2 clonedEntity = null;
    BinaryFormatter formatter = new BinaryFormatter();
    using (MemoryStream memStream = new MemoryStream())
    {
             formatter.Serialize(memStream, sourceEntity);
              memStream.Seek(0, SeekOrigin.Begin);
              clonedEntity = (IEntity2)formatter.Deserialize(memStream);
    }
     

    这个例子是.NET的深拷贝(deep copy)的实现,类似于这样的例子,还有很多。这些API的组合应用是需要掌握的。经过积累后,通常都会有自己的一个Utility类型库。 

    2 Linq to Object。虽然Linq to SQL已经被抛弃和遗忘,但是Linq to Object还真是一项很重要的技术。如果没有这项技术,数据的查找和操作的代码会被foreach充满,这样不容易维护,而且有很多代码都是routine代码,可以省略的。

    string[] names = { "Tom","Dick","Harry","Mary","Jay" };
    IEnumerable<string> query =
                     from    n in names
          where   n.Contains ("a")  // Filter elements
          orderby n.Length          // Sort elements
          select  n.ToUpper( );     // Project each element
    
    foreach (string name in query)
         Console.Write (name + "/");

    同时,与Linq搭配的技术Lambda技术,可以简化很多代码,这也需要掌握,上面的例子用Lambda技术改写一下

    string[] names = { "Tom","Dick","Harry","Mary","Jay" };
    IEnumerable<string> query = names
          .Where   (n => n.Contains ("a"))
          .OrderBy (n => n.Length)
          .Select  (n => n.ToUpper( ));
    
    foreach (string name in query)
         Console.Write (name + "|");

    曾经有个非常流行的考试题目,考察委托的三种写法,举例如下所示

    List<int> list = new List<int>();
    list.AddRange(new int[] { 1, 5, 10, 20 ,33 });
     
    //使用传统委托语法调用FindAll
    Predicate<int> callback = new Predicate<int>(IsEvenNumber);
    List<int> evenNumbers = list.FindAll(callback);
    
    //使用匿名方法
    List<int> evenNumbers = list.FindAll(
                   delegate(int i)
                    {
                        return (i % 2) == 0;
                    });
    
    //使用Lambda表达式
    List<int> evenNumbers = list.FindAll(i => (i % 2) == 0);
    (代码来自于LINQ之路 3:C# 3.0的语言功能(下)

    3  .NET 4引入了新的并行编程库。这项技术不同于多线程技术,它是适应多核时代的需要。来看下面的例子程序

    static double ParallelPi()
    {
            double sum = 0.0;
            double step = 1.0 / (double)num_steps;
            object monitor = new object();
            Parallel.For(0, num_steps, () => 0.0, (i, state, local) =>
            {
                double x = (i + 0.5) * step;
                return local + 4.0 / (1.0 + x * x);
            }, local => { lock (monitor) sum += local; });
            return step * sum;
    }

    有了新面的Lambda表达式基础,这个例子也不难读懂。这是用并行库求PI的值。

    .NET 4还引入了动态语言,如下的例子所示,Python的例子

    ScriptRuntime py = Python.CreateRuntime();
    //Dynamic feature only works on objects typed as 'dynamic'
    dynamic helloworld = py.UseFile("helloworld.py");
    Console.WriteLine("helloworld.py loaded!");
    
    for (int i = 0; i < 1000; i++)
    {
           Console.WriteLine(helloworld.welcome("Employee #{0}"), i);
    }
    
    //Python的代码
    def welcome(name):
        return "Hello '" + name + "' from IronPython"

    如果要改善.NET程序的性能,可以考虑使用.NET并行库。如果你在寻找脚本语言,可以寄宿到.NET中方便调用,这里的Python应该是一个很好的开始。对于.NET框架直接内置的技术,必定会有大量的第三方工具,产品来对它做Enhancement或Extension,你可以找到很称手的工具,为你的项目增加灵活性和改善性能。

    4 ORM开发技术。可以选择NHibernate,也可以选择Entity Framework。ORM技术可以让你的代码专注于业务逻辑,大大简化数据访问代码的编码与调试。此外,ORM技术支持界面与逻辑分离,强类型的数据绑定,这些好处,都可以给你的项目增加灵活性。比如保存客户的代码,用ORM技术写,是这样的

    using (DataAccessAdapterBase adapter =GetDataAccessAdapter())
    {
        try
        {
            adapter.StartTransaction(IsolationLevel.ReadCommitted, "SaveCustomer");
            adapter.SaveEntity(Customer, true, false);
            adapter.Commit();
        }
        catch
        {
            adapter.Rollback();
            throw;
        }
    }

    可不能小看了这几句,首先它是用代码生成器生成的,其次,对于增改数据库字段,这里不用作任何的修改,再次,界面的变动和业务逻辑的变动,也不会影响到这里。就这几项好处,可以节约大量的时间,让你专注于业务逻辑。

    5  分布式的通讯技术。.NET Remoting和WCF,至少要掌握一项才行。

    6  界面组件包。.NET 框架自带的界面控件虽然简单好用,但不够强大。所以,推荐你选购一套流行的界面控件,为你的项目增加可读性。虽然都是说界面不重要,逻辑重要,但是我们心里也明白,界面看起来惨不忍睹,再好的逻辑和架构也也不会被客户接受。界面要做到简单,实用,说起起容易,做起来可相当不容易。这里可以选择的控件比较多,Infragistics,Syncfusion,ComponentOne,都是很著名的控件供应商。

  • 相关阅读:
    ubuntu 制做samba
    《Programming WPF》翻译 第4章 前言
    《Programming WPF》翻译 第4章 3.绑定到数据列表
    《Programming WPF》翻译 第4章 4.数据源
    《Programming WPF》翻译 第5章 6.触发器
    《Programming WPF》翻译 第4章 2.数据绑定
    《Programming WPF》翻译 第4章 1.不使用数据绑定
    《Programming WPF》翻译 第5章 7.控件模板
    《Programming WPF》翻译 第5章 8.我们进行到哪里了?
    《Programming WPF》翻译 第5章 5.数据模板和样式
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2308692.html
Copyright © 2011-2022 走看看