Thursday, November 27, 2008

Những bài học từ một dự án phần mềm

Đây là một câu chuyện có thật về một dự án phần mềm trải qua 4 năm và tiêu tốn 35 triệu USD mà không đem lại kết quả nào, và có kế hoạch kéo dài thêm ít nhất là 4 năm nữa.

Dự án này diễn ra tại một công ty sản xuất dụng cụ thể thao vào hàng đầu trên thế giới, doanh thu khoảng hơn chục tỷ USD một năm, có trụ sở tại Tây Bắc Mỹ, tạm gọi là công ty N.

Trên phương diện là một study case, đây là một dự án khá độc đáo, và có thể dùng làm bài học điển hình về nhiều khía cạnh khác nhau của một dự án phần mềm, nhất là dành cho các doanh nghiệp sản xuất, dịch vụ đang có ý định ứng dụng công nghệ thông tin vào quy trình sản xuất và hoạt động của mình. Bài viết này hướng tới các đối tượng là Giám đốc Công nghệ Thông tin của doanh nghiệp (CIO – Chief Information Technology Officer), Quản trị Dự án (Project Manager) và Kiến trúc sư phần mềm (Software Architect), và sẽ phân tích qua các khía cạnh sau đây của dự án: Quy trình Quản lý (Management Process), Quy trình phát triển phần mềm (Software Development Process)  và Kiến trúc phần mềm (Software Architecture).

Chi tiết...

(Trích từ hanoian.com)

Generics in .NET

There are language features that are nothing more than syntactical sugar. For example, C#'s coalesce operator (??) is a short-handed and specialized if-else. Object initializes make it easier to set properties on a newly created objects. Some features though go beyond mere convenience and add real value. I know it seems like we constantly have to learn new things, while at the same time actually produce code to pay our bills. It can be hard to pick and choose what to learn and what can wait. Let me be straight up though: if you haven't mastered generics yet, you're starting to fall dangerously behind.

Read more...

Wednesday, November 26, 2008

Cách phân trang dữ liệu trong SQL Server 2005

Khi tìm kiếm và hiển thị dữ liệu, việc phân trang dữ liệu kết quả tìm kiếm rất quan trọng, nhất là với lượng dữ liệu lớn. Trong SQL Server 2005 có hàm ROW_NUMBER cho phép bạn thực hiện phân trang các bản ghi nhận được.

Ví dụ sau sẽ minh họa cách thực hiện phân trang dữ liệu:

CREATE PROCEDURE dbo.spGetManyProducts 
	@ProducNo VARCHAR(13) = NULL,
	@PageIndex INT, 
	@PageSize INT 
AS 
BEGIN 

	WITH ProductRecords AS ( 
		SELECT ROW_NUMBER() OVER (ORDER BY ProductName) AS RowIndex, 
			ProductNo, ProductName, Description 
		FROM TbProducts
		WHERE (@ProductNo IS NULL OR ProductNo LIKE @ProductNo)
	) , GetTotalRowCount AS ( 
		SELECT MAX(RowIndex) AS TotalRowCount 
		FROM ProductRecords 
	) 
	SELECT ProductNo, ProductName, Description, TotalRowCount 
	FROM ProductRecords, GetTotalRowCount 
	WHERE (RowIndex BETWEEN (@PageIndex - 1) * @PageSize + 1 AND @PageIndex*@PageSize) 
END

Trong đoạn code TSQL ở trên còn cho phép bạn lấy về tổng số dòng dữ liệu có thể nhận được với mỗi kết quả tìm kiếm.

Đây là cách chỉ được sử dụng trên SQL Server 2005 hoặc mới hơn. Còn với SQL Server 2000, bạn có thể sử dụng bảng tạm để lấy toàn bộ kết quả tìm kiếm, sau đó lấy ra các dòng cần thiết với câu lệnh phù hợp. Tôi có 1 cách khác để phân trang trên SQL Server 2000 sẽ đưa ra trong một dịp khác.