總結一下ERP .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,都是很著名的控件供應商。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM