Wednesday, September 19, 2007

.NET Framework 3.0 (part 2)

Trong Entry trước đã có nói về các Foundation của .NET 3.0 trở lên là WPF - Windows Presentation Foundation, WCF - Windows Communication Foundation, WF - Windows Workflow Foundation , Windows CardSpace.

Entry này sẽ đi sâu hơn những khác biệt trong các .NET framework, từ 1.x, 2.0, 3.0 và 3.5 (beta)

Dưới đây là bảng so sánh một cách khái quát giữa các framework và các tính năng.


.NET 1.1

.NET 2.0

.NET 3.0

.NET 3.5

CLR Version

CLR 1.0

CLR 2.0

CLR 2.0

CLR 3.0

C#-version

C# 1.0

C# 2.0

C# 2.0

C# 3.0

Pre-installed on OS

Windows Server 2003

Windows Server 2003 R2

Windows Vista

Windows Server 2008

Foundations

N/A

N/A

WPF
WCF
WF
WCS

WPF
WCF
WF
WCS

ADO

ADO.NET

ADO.NET 2.0

ADO.NET 2.0

ADO.NET vNext= LINQ

Special editions

.NET Compact Framework 1.0 .NET Compact Framework 2.0
  • .NET Compact Framework 2.0
  • .NET Micro Framework 2.0
  • .NET Compact Framework 3.5
  • Silverlight 1.1
  • .NET Micro Framework 2.0

Từ bảng trên, có thể thấy một số điểm sau đây:

  • Từ 1.x lên 2.0 đã có sự thay đổi cơ bản về cấu trúc bên dưới của .NET framework (CLR 1.0 --> CLR 2.0)
  • Từ 2.0 lên 3.0 về cơ bản thì không có gì thay đổi nhiều trừ các Foundation được đưa vào. Như vậy, những ứng dụng đã được viết để chạy trên .NET 2.0 hoàn toàn có thể chạy được trên nền 3.0. Từ đó, nếu bạn đang sử dụng .NET 1.x, và bạn muốn nâng cấp lên, tốt nhất là nâng cấp lên 3.0 luôn mà ko cần phải cài .NET 2.0. Ngay cả trong lập trình C#, thì C# vẫn là 2.0. Do đó, nếu đang cài .NET 2.0, và bạn chưa cần phải sử dụng các Foundation mới, thì việc cài đặt 3.0 là không cần thiết.
    Như vậy, nếu để đưa ra một lời khuyên cho bạn nên cài .NET framework nào, thì .NET 3.0 vẫn được prefer hơn cả vì nó bao gồm cả 2.0 và .NET 3.5 thì chưa được ổn định (beta)
  • .NET 3.0 có chứa 1 compiler mới để xử lý các new features và để xử lý LINQ

Các tính năng mới trong .NET 3.5

Thực thi bên dưới Framework nhanh hơn

  1. Bộ thu dọn "Rác" trong bộ nhớ làm việc nhanh hơn
  2. Quá trình NGen nhanh hơn, "thông minh" hơn đồng thời cũng yêu cầu ít bộ nhớ hơn.
  3. Cải thiện các tính năng hỗ trợ CPU 64 bit
  4. Nâng cao performance cuả ThreadPool
  5. Security check caching trong quá trình thực thi NGen.

Base Class Library – Các class mới

  1. Thêm các kiểu dữ liệu mới: BigInteger, HashSet và DateTime2
  2. NSA Suite ”B” and FIPs compliant cryptography
  3. Lightweight Reader/Writer Lock Classes
  4. Anonymous and Named Pipes IO Classes
  5. Tích hợp với Event Tracing for Windows
  6. New Addin hosting model for extensibility

Language Integrated Query (LINQ)

  1. Đưa LINQ vào ngôn ngữ lập trình (C# và VB .NET) và cả trong framework

Workflow Enabled Services – Process and Messaging together

  1. Sử dụng Workflow để tạo ra các Services có khả năng chạy trong thời gian lâu dài và ổn định. Công cụ mới là WF activities and new programming model classes cũng đã được thêm vào để đơn giản hoá quá trình tạo ra các Service có Workflow được ứng dụng sử dụng WF và WCF. Tính năng này cho phép các lập trình viên có thể phát triển các business logic cho các Service sử dụng WF đồng thời gởi message từ Service đó thông qua WCF, điều này cho phép đưa ra những chiến lược tốt hơn và giảm thời gian viết code so với trước đó.

Web 2.0 Friendly and AJAX Enabled WCF Services

Visual Studio Developer Tools for WF, WCF and in Visual Studio “Orcas”

More WS-* Standards Support

  1. Implementation in WCF of the latest OASIS specifications Web Services Atomic Transaction (WS-AtomicTransaction) 1.1, WS-ReliableMessaging 1.1, WS-SecureCOnversation and Web Services Coordination (WS-Coordination) 1.1.

RSS and ATOM Syndication API

  1. Trong .NET 3.5 hỗ trợ các tính năng có thể sinh ra các RSS và ATOM Syndication một cách dễ dàng hơn.

Partial Trust Support for WCF Hosting

  1. Partial trust on the client is provided for ASMX parity focussing mainly on partially trusted WCF applications deployed through click-once. Support is provided for basic HTTP binding provided that the application runs in the Internet zone permissions and have granted the apropriate WebPermission. Secure communication is possible through transport security only. All other features are not available to partially trusted applications including hosting services, duplex communications, non-HTTP transports, WS-* protocols and any WF use.

Rules Data Improvements

  1. The rules engine in WF is improved to add support for C# 3.0 extension methods, and for operator overloading . Also the ”new” operator is added to compete the base set of expression types.

Built-in WPF tools for Visual Studio “Orcas”

  1. The Visual Studio designer for WPF was previously released as a CTP. It is not integrated into the development environment and is significantly improved.

Additional WPF Features and Improved Performance

  1. WPF has smoother animations, faster startup and better overall performance. There are also new data types available for data binding with LINQ. Better integration support is now provided for with codename “WPF/E”.

Trên đây là 1 số tính năng mới bên trong .NET framework 3.5 và Visual Studio .NET Orcas (beta).

Chú thích NGen:

NGen là từ viết tắt của Native Image Generator. Đây là 1 công cụ được đưa vào từ .NET 1.x dùng để tạo 1 "native image" cho 1 assembly. Trong .NET, CLR thực thi các mã IL là mã trung gian của .NET (không phải mã nhị phân). Để máy có thể hiểu được, thì nó cần phải được dịch sang mã máy (mã nhị phân). CLR Excution Engine có chứa 1 bộ biên dịch gọi là JIT (Just In Time) để mà chuyển mã IL này sang mã dạng nhị phân (native code) trong lúc chạy. Tuy nhiên, mã nhị phân này sẽ không được lưu lại trên các thiết bị lưu trữ permanant mà nó chỉ được lưu trên bộ nhớ trong Process lifetime. Khi application được restart thì bộ biên dịch JIT phải compile lại các mã IL sang mã native lại.

Bộ NGen này cho phép tạo 1 cái "Native Image" (như là chụp lại cái đoạn mã máy đã được biên dịch) và lưu trên thiết bị lưu trữ trong 1 vùng đặc biệt gọi là NGen Cache - Native Image Cache.

Qua các .NET framework khác nhau, bộ NGen này được tối ưu hóa nhiều hơn với những giải thuật tốt hơn. Nếu gõ vào Start > Run... %windir%\assembly thì có thể thấy thư mục NGen Cache này

Phần tiếp theo: Những cái mới trong C# 3.0

.NET Framework 3.0 (part 1)

Hic, mấy tuần này đang rảnh, nên ngồi đọc tài liệu, cập nhật kiến thức. Mình đã quyết định đi theo hướng công nghệ của MS, chạy theo nó đúng là hụt hơi luôn. .NET 3.0 vừa mới ra, chưa kịp xài, đã ra .NET 3.5, VSS Orcas và SilverLight… hic hic hic

Tranh thủ viết blog, chia sẻ với bạn bè chút kiến thức mới sưu tầm được.

Bài viết này trước hết giải thích một số nền tảng mới trong .NET 3.0.

Trước hết, thì theo đọc qua taì liệu 1 cách sơ bộ thì có thể đưa ra công thức cho .NET 3.0 là

.NET 3.0 = .NET 2.0 + WPF + WCS + WF + WPF



Riêng đối với .NET 3.5 ngoài WPF + WCS + WF + WPF, phần core sử dụng CLR 3.5 còn có thêm 1 cái khá hay đó là LINQ và ASP .NET AJAX được tích hợp các tính năng MS ASP .NET AJAX 1.0 (trước đó code name là Atlas) từ thời .NET 2.0 và khá nhiều tính năng mới được thêm vào. Có thể nói từ .NET 3.0 sang .NET 3.5 là cả 1 break change.

Okie okie, đi chi tiết cho .NET 3.0 trước, thì dưới đây là 1 số tính năng mới của nó

Chúng ta sẽ đi sâu hơn chi tiết từng đề mục:

WPF: Windows Presentation Foundation

WPF là một bộ các controls trong đó có khá nhiều cái là trùng lặp với các control đơn giản trong Windows Form. Tuy nhiên, các control mới hỗ trợ các tính năng về đồ họa và các tương tác một cách có ấn tượng hơn.

Ví dụ như các đối tượng có thể chứa các đối tượng khác như là 1 nội dung của nó. 1 cái button có thể chứa cả 1 cái Grid, trong grid có thể chứa nhiều label, textbox, hình hay bất kỳ các control nào khác. Đó là đặc điểm khá tuyệt vời của WPF, nó cho phép các control thể hiện ở rất nhiều dạng khác nhau cùng với các tương tác khác nhau, hơn là chỉ 1 đòng text.

Các control trong WPF cũng có thể được tô gradient phần background. Lập trình viên có thể định ra cacs style và template sẵn để cho toàn bộ form có 1 cái GUI thống nhất. Nếu như mà mình cần thay đổi 1 cái button từ kiểu linear gradient (đổ màu tuyến tính) từ màu đỏ sang vàng thành radial gradient (đổ màu tuyến tính theo tâm vòng tròn) từ màu trắng sang đen, mình có thể làm rất dễ dàng trong vài giây và chỉ tại 1 chỗ.

Một đặc điểm nữa của các Control trong WPF đó là nó có thể chứa các trigger, và thực hiện số số action nào đó khi nhận được “kích thích” . Ví dụ 1 cái button có thể thay đổi màu sắc, làm bự ra, thu nhỏ lại, hay quay vòng vòng hay nói chung, các hiệu ứng mà con chuột được đưa vào hoặc là đc nhấn lên đó.

Một trong những khái niệm quan trọng nhất trong WPF là sự tách biệt giữa giao diện và code của nó. Từ ý tưởng là người thiết kế giau diện có thể dùng 1 cái tool như là Expression để xây dựng giao diện, và developer sẽ xử lý code cho các đối tượng đó. Hiện tại, thì chương trình Expression ko có đc miễn phí mà nó phải đc trả tiền để có nó, và MS cũng chưa có cho biết là Expression có được có trong Visual Studio hay ko? Hiện tại, với cái giao diện design WPF trong Visual Studio thì nó ko có làm việc tốt lắm với các control của WPF. Hi vọng sẽ có những caỉ tiến hơn trong các phiên bản sau.

Trong WPF cũng có đưa them 1 khái niệm là XAML XAML (Extensible Application Markup Language — đọc là "zammel"), đây là ngôn ngữ mà sẽ định dạng câú trúc cuả WPF và cũng là ngôn ngữ chính để tạo ra SilverLight object.

Tuy nhiên, các WPF control lại ko muốn “làm việc” chung với các Windows Form control. Mình có thể dùng 1 control của Win Form để chứa WPF control và ngược lại, tuy nhiên, nó ko có dễ dàng như việc kéo thả những control thông thường trong 1 cái form.

Ví dụ, control trong Win Form sử dụng Text để define cái text của control đó như Button hay Textbox chẳng hạn. Ngược lại, các WPF control sử dụng Content để define cái mà bên trong nó chứa, có thể là 1 control khác hoặc 1 đoạn text chẳng hạn. Ngoại trừ Window object (là 1 phiên bản trong WPF của Form) thì cần có cả Content chứa các controls khác và cả Title để định nghĩa cái tiêu đề form.

Windows Control cũng sử dụng FontFamily, FontSize, FontStretch, FontStyle, và FontWeight một cách riêng biệt để hiển thị text, nhưng với Control WPF thì sử dụng thuộc tính Font duy nhất với các thuộc tính riêng. Điều này cũng đồng nghĩa là Visual Studio's WPF form designer sẽ ko có tạo ra những dialog có những font đẹp hơn theo ý mình.

WCF - Windows Communication Foundation

Windows Communication Foundation là 1 bộ các công cụ để thực hiện theo Dịch vụ hướng Kiến Trúc (SOA). Nó bao gồm các lớp và method để xây dựng các lớp (class) client và server. Những tool này giúp lập trình viên xây dựng cacs Class một cách rất dễ dàng.

WCF cũng đồng thời cho phép client và server giao tiếp với nhau bằng rất nhiều cách như TCP, HTTP, name pipes hay Message Queue. WCF cũng đồng thời bao gồm các tính năng để cung cấp các giải pháp giao tiếp an toàn giữa client và server.

Tuy nhiên, 1 điểm bất lợi là WCF cung cấp tất cả những option này thì đồng thời, nó cũng yêu cầu cấu hình, cấu hình cho WCF là 1 vấn đề. VSS cũng ko cung cấp nhiều thông tin hướng dẫn làm sao để build một file cấu hình bằng file XML để câú hình client và server ở mức độ mong muôns. Vì vậy, vấn đề cấu hình cho WCF là một khó khăn mà cần cân nhắc khi sử dụng WCF.

WF - Windows Workflow Foundation

Hì, trước tiên, chúng ta cần giải thích vì sao MS lại sử dụng WF cho cụm từ Windows Workflow Foundation mà đúng ra là fải sử dụng WFF? Thực ra, WFF là tên viết tắt của tổ chức World Wrestling Federation, nên MS cũng ko muốn bị kiện tụng gì nữa, cuối cùng đã sử dụng là WF vừa ngắn gọn hơn. Vì vậy, ở 1 số tài liệu, thuật ngữ này được sử dụng là Windows Workflow hoặc Workflow.

WF cung cấp 1 nhóm các lớp (class) mà mô hình hoá từng khía cạnh của 1 workflow của 1 ứng dụng. Những lớp khác nhau đại diện cho những action ví dụ như đợi 1 sự kiện, thực thi theo điều kiện (branching), đợi 1 trong nhiều sự việc xảy ra và thực thi các lệnh tuần tự.

Sau khi thiết kế workflow, 1 workflow engine sẽ di chuyển các đối tượng qua rất nhiều trạng thái trong workflow cho tới khi chúng đến được điều kiện kết thúc.

Windows CardSpace

WC - CardSpace (hay InfoCard) là 1 công cụ để xây dựng hệ thống nhận dạng dựa vào CardSpace đã trên máy client. Ví dụ trên Ebay xây dựng 1 hệ thống cho phép xác định tính đáng tin cậy cuả ngươì mua và người bán. Tương tự, người dùng CardSpace cũng sẽ tạo ra các identities mà người khác ko thể làm giả khi thao tác với chương trình ứng dụng.

CNG - Cryptography API: Next Generation

CNG được MS hứa hẹn là 1 mô hình mới, đơn giả trong việc mã hoá. Nó bao gồm nhiều cách để "plug and play" với các component khác nhau ví dụ như bộ sinh số ngẫu nhiên (có thể được customize). Nó cũng bao gồm các giải thuật mã hoá mới trên thế giới.

Tuy nhiên, có vẻ như không phải là ý tưởng hay khi dùng CNG với managed code. Thư viện CNG ko fải là thư viện .NET (.NET assembly), nó cũng không phải là COM, cũng không phải là 1 kiểu thư viện như *.tbl file

UAC - User Application Control

Nếu ai đã từng sử dụng Vista thì sẽ thấy 1 điều rằng, dù đang login vào quyền Administrator, thì khi cài đặt phần mềm hoặc tương tác 1 số phần hệ thống, thì 1 hộp thoại sẽ hiển thị, và đôi khi, hiển thị cả ô nhập password của admin. Cách làm này nhằm bảo vệ hệ thống được phép truy xuất bởi những người được phép.

UAC hướng tới việc điều khiển các quyền sử dụng của người dùng đối với application, vì vậy, khi lập trình, thì cần lưu ý đến mức độ ảnh hưởng và cần dùng quyền càng ít càng tốt.

Trong .NET, thì các quyền như ghi, sửa, xoá Registry được phép thực thi mà không cần quyền Admin.

Phù, mệt quá, entry sau viết tiếp: So sánh giữa .NET 1.0, 2.0, 3.0 và 3.5

Một số tài liệu tham khảo