(Post 09/05/2006) Không thể có ứng dụng tốt
nếu không có công cụ phát triển tốt, dù là phát triển với bất kỳ ngôn
ngữ (lập trình) nào, ngay cả với các ngôn ngữ 'mạnh' của nền tảng .NET
hiện đang 'nổi đình nổi đám'. Ngoài công cụ phát triển ứng dụng 'chính
thống' và 'đồ sộ' như Visual Studio .NET (VS.NET) của Microsoft, cộng
đồng phát triển .NET hiện nay có thêm nhiều lựa chọn với các công cụ gọn
nhẹ hơn và đặc biệt là có mã nguồn mở hay miễn phí. Bài viết này giới
thiệu 10 công cụ miễn phí tốt nhất dành cho các nhà phát triển .NET, trong
số đó có những công cụ giúp phát triển ứng dụng nhanh hơn và có những
công cụ có thể làm thay đổi hẳn cách thức bạn viết mã lệnh (code).
SNIPPET COMPILER
Snippet Compiler (http://www.sliver.com/dotnet/SnippetCompiler)
là công cụ dùng để viết code, biên dịch và chạy, nó đặc biệt có ích đối
với những đoạn code nhỏ (khi bạn không muốn tạo toàn bộ project VS.NET
cùng với các tập tin đi kèm).
Ví dụ, đoạn code dưới đây gọi chạy một ứng dụng khác
(Notepad) từ .NET. Bạn có thể thực thi (chạy) đoạn code này ngay trong
Snippet Compiler (chỉ việc nhấn nút Play).
Hình 1:
Snippet Compiler |
|
using System;
using System.Collections;
public class MyClass {
public static void Main() {
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName= 'notepad.exe';
proc.Start();
proc.WaitForExit();
}
}
Hình 2:
Regulator |
|
REGULATOR
Regulator (http://royo.is-a-geek.com/regulator)
là công cụ hoàn chỉnh dùng để biên dịch và kiểm tra biểu thức chuỗi, đây
là vấn đề hiện được quan tâm vì được ứng dụng nhiều trong .NET. Biểu thức
chuỗi được dùng để định nghĩa các chuỗi ký tự và số, thường được dùng
để so trùng dữ liệu người dùng nhập vào hay để tìm chuỗi ký tự trong một
chuỗi lớn hơn.
Regulator cho phép bạn nhập vào một biểu thức chuỗi và
dữ liệu đầu vào để kiểm tra. Bằng cách này bạn có thể thấy cách thức làm
việc của biểu thức và kết quả trả về trước khi thực hiện trong ứng dụng.
Một trong những đặc tính hấp dẫn nhất của Regulator là
khả năng tìm thư viện biểu thức trực tuyến ở regexlib.com. Ví dụ, nếu
nhập vào chuỗi 'phone' trong ô tìm kiếm, bạn sẽ tìm thấy hơn 20 biểu thức
khác nhau so khớp số điện thoại, bao gồm các biểu thức áp dụng cho số
điện thoại ở Anh, Úc...
CODESMITH
CodeSmith (http://ericjsmith.net/codesmith)
là công cụ sinh mã dựa trên template (mẫu có sẵn) dùng cú pháp tương tự
như ASP.NET để sinh ra dạng code hay text bất kỳ, từ tập hàm đơn giản
đến toàn bộ ứng dụng. Không giống như nhiều công cụ sinh mã khác, CodeSmith
không yêu cầu bạn mô tả thiết kế hay kiến trúc ứng dụng.
Khi xây dựng ứng dụng, bạn nhận thấy thường phải lặp
đi lặp lại một số công việc, ví dụ như viết code truy cập dữ liệu hay
xây dựng hàm. CodeSmith đặc biệt hữu dụng trong những tình huống như vậy,
vì nó cho phép bạn tạo các template để thực hiện tự động các công việc
này, không chỉ cải thiện hiệu suất làm việc mà còn tránh cho bạn sự nhàm
chán.
CodeSmith có sẵn một số template, bao gồm các kiểu tập
hợp .NET cũng như thủ tục, nhưng sức mạnh thực sự của công cụ này chính
là khả năng tạo template riêng.
Template của CodeSmith là tập tin văn bản đơn thuần và
bạn có thể tạo bằng công cụ soạn thảo văn bản bất kỳ, chỉ với yêu cầu
là lưu lại với đuôi .cst. Đầu tiên, bạn tạo phần đầu khai báo ngôn ngữ
dùng cho template, ngôn ngữ kết quả và mô tả vắn tắt template.
<%@ CodeTemplate Language='C#'
TargetLanguage='C#'
Description='Car Template' %>
Phần kế tiếp của template khai báo các thuộc tính sẽ
được xác định khi template chạy. Ví dụ dưới đây khai báo một thuộc tính
chuỗi (string).
<%@ Property Name='ClassName' Type='String' Category='Context'
Description='Class Name' %>
Bước tiếp theo xây dựng phần thân template với mã lệnh
tương tự ASP.NET, bạn có thể dùng bất kỳ lệnh .NET nào.
CodeSmith khá dễ dùng và có thể cho ra những kết quả
tuyệt vời nếu được sử dụng đúng đắn. Một trong những phần phổ biến nhất
của ứng dụng thích hợp cho việc sinh mã là truy cập dữ liệu. CodeSmith
có tích hợp thành phần đặc biệt gọi là SchemaExplorer có thể dùng để sinh
các template cho bảng dữ liệu (table), thủ tục lưu trữ (stored procedure)
và gần như bất kỳ đối tượng SQL Server.
NUNIT
NUnit (http://www.nunit.org)
là khung kiểm tra đơn vị chương trình (như lớp, hàm hay module) có mã
nguồn mở. Được phát triển theo mô hình JUnit (công cụ kiểm tra nổi tiếng
dùng cho Java), nhưng NUnit được viết bằng C# và khai thác được ưu điểm
của các ngôn ngữ .NET.
NUnit cho phép bạn viết hàm kiểm tra lỗi (unit test)
theo ngôn ngữ lựa chọn để kiểm tra một chức năng cụ thể của chương trình.
Unit test là cách thức tốt để kiểm tra hoạt động của đoạn code viết mới,
và cũng là một phương thức kiểm tra hồi quy ứng dụng. Các unit test có
thể lưu lại và chạy lại mỗi khi bạn sửa đổi code, điều này giúp phát hiện
lỗi dễ dàng hơn và đảm bảo phát triển ứng dụng tốt hơn.
NUnit cung cấp khung để viết các unit test, và còn có
giao diện đồ họa để chạy các unit test và xem kết quả. Ví dụ, chúng ta
sẽ kiểm tra hoạt động của lớp Hashtable trong .NET với việc thêm vào và
lấy ra 2 đối tượng. Bước đầu tiên là tham chiếu đến NUnit.Framework để
có thể dùng các thuộc tính và hàm của NUnit; kế tiếp, tạo một lớp và đánh
dấu nó với thuộc tính [TestFixture] để NUnit biết lớp này có hàm kiểm
tra.
using System;
using System.Collections;
using NUnit.Framework;
namespace NunitExample {
[TestFixture]
public class HashtableTest {
public HashtableTest() { }
}
}
Kế tiếp, chúng ta tạo một hàm và đánh dấu với thuộc
tính [Test] để NUnit biết đây là hàm kiểm tra. Trong hàm này chúng ta
sẽ thiết lập Hashtable và đưa vào 2 giá trị, sau đó dùng hàm Assert.AreEqual
để truy xuất 2 giá trị này.
[Test]
public void HashtableAddTest(){
Hashtable ht = new Hashtable();
ht.Add('Key1', 'Value1');
ht.Add('Key2', 'Value2');
Assert.AreEqual('Value1', ht['Key1'], 'Wrong object returned!');
Assert.AreEqual('Value2', ht['Key2'], 'Wrong object returned!');
}
Để chạy thủ tục kiểm tra, bạn cần xây dựng project, mở
nó trong NUnit và nhấn nút Run. Bạn cũng có thể tải về NUnit Visual Studio
.NET add-in (http://sourceforge.net/project/nunitaddin)
để chạy kiểm tra trực tiếp trong Visual Studio.
Hình 3:
FxCop |
|
FXCOP
FxCop (http://www.gotdotnet.com/team/fxcop)
là công cụ kiểm tra gói chương trình đảm bảo tính tương thích với những
quy tắc của .NET Framework: Thiết kế thư viện, vấn đề bản địa, quy
cách đặt tên, hiệu suất, bảo mật. FxCop do Microsoft phát triển và kèm
theo tập các quy tắc do Mircosoft đưa ra, tuy nhiên bạn có thể tạo thêm
những quy tắc riêng.
Ví dụ, chúng ta hãy xem FxCop kiểm tra và phát hiện lỗi
trong gói NUnitExample ở trên. Trước hết, bạn cần tạo một project FxCop
và đưa vào gói mà bạn muốn kiểm tra, sau đó nhấn Analyze và FxCop sẽ kiểm
tra và đưa ra thông báo lỗi (Hình 3).
FxCop có thể giúp bạn viết code tốt hơn nhưng nó không
thể sửa chữa thiết kế tồi hay lập trình kém. FxCop cũng không thể thay
thế việc kiểm tra code nhưng nó cho phép bạn dành nhiều thời gian hơn
cho những vấn đề quan trọng hơn là quy ước đặt tên.
Hình 4:
Reflector |
|
.NET REFLECTOR
.NET Reflector (http://aisto.com/roeder/dotnet)
là công cụ 'dịch ngược' (decompiler) và duyệt danh sách lớp, có thể giúp
bạn khám phá tất cả 'bí mật' bên trong một gói. .NET Framework đưa ra
reflection dùng để xem code .NET bất kỳ, dù là lớp đơn hay toàn bộ gói
chương trình ('reflection' là tính năng cho phép ứng dụng truy vấn siêu
dữ liệu của chính nó). Reflection cũng có thể dùng để truy xuất thông
tin từ các lớp, hàm và thuộc tính khác nhau trong một gói nào đó. .NET
Reflector cho phép bạn duyệt danh sách các lớp và hàm trong một gói, bạn
có thể xem xét ngôn ngữ trung gian của Microsoft (MSIL) được sinh ra từ
các lớp và hàm này, và có thể dịch ngược các lớp và hàm sang C# hay VB.NET.
Ví dụ, chúng ta dùng .NET Reflector xem xét gói NUnitExample
ở trên, hình 4 thể hiện gói này khi được nạp. Để xem MSIL của một hàm,
bạn nhấn chọn hàm và chọn menu Disassembler, hay chọn menu Decompiler
để xem ở dạng ngôn ngữ C#. Bạn cũng có thể dịch ngược hàm sang VB.NET
hay Delphi bằng cách thay đổi tùy chọn trong menu Language.
.NET Reflector đặc biệt có ích để tìm hiểu các hàm và
gói trong .NET Framework. Ví dụ, dùng .NET Reflector bạn có thể biết được
cách thức mà Microsoft dùng với hàm ReadXml. .NET Reflector cũng rất có
ích để tìm hiểu cách thức tạo các đối tượng như HttpHandlers, và qua đó
biết được cách thức mà nhóm phát triển của Microsoft đã xây dựng các đối
tượng trong Framework.
NDOC
Việc lập tài liệu chương trình luôn là công việc khó
gây hứng thú. Ở đây không nói về tài liệu thiết kế mà là tài liệu hàm
và thuộc tính của lớp. Công cụ NDoc (http://ndoc.sourceforge.net) sẽ tự
động sinh tài liệu cho chương trình của bạn bằng cách dùng reflection
để truy vấn thư viện và dùng XML được sinh từ chú thích XML C#. Chú thích
XML chỉ có hiệu lực cho C#, tuy nhiên công cụ VB.DOC (http://vb-doc.sourceforge.net)
và VBCommenter của VS.NET Power Toy có thể thực hiện tương tự cho VB.NET.
Ngoài ra, phiên bản kế tiếp của Visual Studio sẽ hỗ trợ nhiều ngôn ngữ
hơn.
Đầu tiên, bạn dùng NDoc để sinh chú thích XML cho gói
chương trình. Nhấn phải project và chọn Properties.Configuration Properties.Build,
sau đó nhập vào đường dẫn nơi lưu tập tin XML trong tùy chọn XML Documentation
File. Dưới đây là tài liệu của hàm trong ví dụ NUnit.
/// <summary>
/// This test adds a number of values to the Hashtable collection
/// and then retrieves those values and checks if they match.
/// </summary>
[Test]
public void HashtableAddTest(){
//Method Body Here
}
Tài liệu XML của hàm này sẽ được trích xuất ra và lưu
lại trong tập tin XML.
<member name='M:NUnitExample.HashtableTest.HashtableAddTest'>
<summary>This test adds a number of values to the Hashtable collection
and then retrieves those values and checks if they match.</summary>
</member>
Sau khi sinh ra tập tin XML, bước kế tiếp nạp gói chương
trình và tập tin XML vào NDoc để xử lý. Việc này được thực hiện đơn giản
bằng cách mở NDoc và nhấn nút Add. Sau khi khai báo thuộc tính đầu ra,
nhấn nút Generate để bắt đầu quá trình sinh tài liệu.
NANT
NAnt (http://nant.sourceforge.net),
phiên bản .NET của Ant được hỗ trợ với dự án Jakarta (khá phổ tiếng trong
cộng đồng phát triển Java), là công cụ cho phép dễ dàng tạo qui trình
build (biên dịch và tích hợp ứng dụng) dựa trên XML. Khi có nhiều nhà
phát triển cùng làm việc trên một dự án, bạn không thể phó thác việc build
cho từng người, và chắc bạn cũng không muốn thực hiện build thủ công nhiều
lần mỗi ngày. NAnt cho phép bạn build tự động toàn bộ ứng dụng, chép các
tập tin, chạy các kiểm tra NUnit, gửi email và nhiều chức năng khác. NAnt
dùng các tập tin XML để khai báo những tác vụ cần thực hiện trong quá
trình build. Lưu ý là MSBuild, thành phần trong phiên bản mới Visual Studio
2005, có tính năng tương tự và có thể thay thế NAnt.
Ví dụ dưới đây là tập tin XML (có phần đuôi là .build)
để biên dịch ứng dụng NUnitExample với NAnt.
<?xml version='1.0'?>
<project name='NUnit Example' default='build' basedir='.'>
<description> The NUnit Example Project </description>
<property name='debug' value='true'/>
<target name = 'build' description = 'compiles the source code'>
<csc target='library' output='.\bin\debug\NUnitExample.dll'
debug='${debug}'>
<references>
<includes name='C:\program files\NUnit
V2.1\bin\NUnit.Framework.dll' />
</references>
<sources>
<includes name='HashtableTest.cs'/>
</sources>
</csc> </target>
</project>
Tập tin XML này được lưu ở thư mục gốc của project NUnitExample.
Bạn đến thư mục này và chạy nant.exe để biên dịch ứng dụng.
Tuy không dễ dàng như việc nhấn Build trong Visual Studio,
nhưng NAnt là công cụ rất mạnh dùng để xây dựng qui trình build chạy tự
động theo lịch biểu.
Hình 5:
ASP.NET Version Switcher |
|
Công cụ chuyển đổi
Cuối cùng là 2 công cụ đơn giản nhưng rất hữu dụng. Đầu
tiên là ASP.NET
Version Switcher, công cụ này dùng để chuyển đổi phiên bản (version)
ASP.NET của một website đang hoạt động. Công cụ thứ hai là Visual
Studio Converter dùng để chuyển đổi tập tin project từ VS.NET 2002
sang VS.NET 2003 hay ngược lại.
IIS sử dụng cơ chế ánh xạ phần mở rộng (extension) để
xử lý yêu cầu một website. Khi cài ASP.NET 1.1, cơ chế này được nâng cấp
phiên bản mới và gây lỗi khi chạy ứng dụng được xây dựng trên ASP.NET
1.0. Để giải quyết vấn đề này, bạn có thể chuyển tất cả ánh xạ phần mở
rộng của website về phiên bản 1.0, tuy nhiên, thực hiện thủ công việc
này rất vất vả và đây chính là nơi 'dụng võ' của ASP.NET Version Switcher.
Tiện ích nhỏ này có thể dùng để chuyển version .NET của bất kỳ ứng dụng
ASP.NET nào. Công cụ này càng có ích khi tương lai có thêm các phiên bản
mới ASP.NET và .NET Framework.
Hình 6:
Visual Studio Converter |
|
Visual Studio Converter tương tự như ASP.NET Version
Switcher, ngoại trừ việc nó được dùng để chuyển đổi version của tập tin
project Visual Studio. Mặc dù chỉ có một ít khác biệt giữa .NET Framework
version 1.0 và 1.1, một khi tập tin project được chuyển từ VS.NET 2002
sang VS.NET 2003 thì không thể chuyển ngược lại. Tuy nhiên, đôi khi việc
chuyển ngược lại cần thiết. Công cụ Converter này cho phép chuyển bất
kỳ tập tin solution hay project từ Visual Studio 7.1 (VS.NET 2003) về
Visual Studio 7.0 (VS.NET 2002) và ngược lại.
Kết luận
Vậy là chúng ta đã 'cưỡi ngựa xem hoa' một số công cụ
miễn phí tuyệt vời hỗ trợ cho việc phát triển trên nền .NET. Hy vọng trong
số này có những công cụ đáp ứng nhu cầu của bạn và có thể giúp bạn cải
thiện hiệu suất. Hãy trang bị đầy đủ các công cụ cần thiết, đó có thể
là máy tính mạnh, Visual Studio phiên bản mới nhất hay tiện ích miễn phí
vì chúng sẽ giúp tạo nên sự khác biệt cho bạn.
Thanh Phong
(theo PC World VN) |