SubSonic là gì?
SubSonic là một framework với rất nhiều công cụ giúp xây dựng kiến trúc
dự án (đặc biệt các dự án web) một cách nhanh chóng, trong đó ý tưởng
chính là tự động hóa công việc viết mã cho DAL.
Đặc điểm
• SubSonic giảm thời gian viết mã cho người phát triển.
• SubSonic gắn liền với "tự động hóa", được cài đặt để cập nhật
thay đổi thiết kế của CSDL và tự động đồng bộ, cập nhật mã cho DAL, để
người phát triển có thể tập trung vào những công việc sáng tạo khác.
• SubSonic sử dụng mô hình Entity làm nền tảng và không hỗ trợ DataSet.
• SubSonic thiết kế DAL dựa trên các mô hình nổi tiếng: "Provider
Pattern" và "Active Record Pattern". Active Record là một pattern đặc
biệt của Entity với 3 trạng thái đặc trưng: IsLoaded, IsNew và IsDirty.
Ngoài ra, giữa các ActiveRecord có quan hệ liên kết với nhau giống như
liên kết các bảng trong CSDL.
• Dựa vào ORM (Object Relational Mapping), SubSonic xây dựng
ánh xạ giữa các Table/View/Stored Procedures với các đối tượng tạo nên
DAL. Ngoài ra, SubSonic được thiết kế tương thích với nhiều hệ CSDL (MS
SQL, MySQL, Oracle...).
Trước đây khi xây dựng DAL, chúng ta thường sử dụng DataSet hoặc
Entity để trao đổi dữ liệu giữa các tầng với nhau. Các Entity hoặc
DataSet là kết quả của phép ánh xạ các bảng CSDL (Table) với các đối
tượng. Tuy nhiên việc xây dựng các ánh xạ như vậy thường rất vất vả cho
các lập trình viên. Thời kỳ đó các công cụ thương mại như
CodeSmidth... ra đời giúp các lập trình viên nhanh chóng tạo ra các đối
tượng (Entity, DataSet...) từ các bảng. Tuy nhiên hạn chế của
CodeSmidth là lập trình viên phải có kiến thức về ngôn ngữ script để
định nghĩa ra các Template trước khi tạo ra Entity, DataSet hay một
"Object Pattern" nào đó.
Kiến trúc
• Trung tâm của SubSonic framework là DAL Builder, có nhiệm vụ
tạo ra một loạt các đối tượng (Model, Controller), nhờ đó giảm tối đa
công sức viết mã. Tất cả các đối tượng được tạo ra bởi SubSonic đều
được thiết kế theo kỹ thuật "strongly-typed" sao cho dữ liệu được quản
lý an toàn và hiệu quả.
• Sau khi đã có các đối tượng được tạo ra từ DAL Builder, SubSonic hỗ
trợ một Query Engine cho phép truy vấn dữ liệu động mà không cần phải
viết mã truy vấn, nhờ đó giảm được thời gian cho những công việc lặp
lại, nhàm chán (đặc biệt là đối với các CSDL lớn) để người phát triển
có thể tập trung nhiều hơn vào các công việc sáng tạo khác.
• Bao quanh SubSonic là các tầng tiện ích, thư viện API và ngày càng
được hoàn chỉnh với nhiều Control mới. Đáng kể nhất là "giàn giáo"
(Scaffold) giúp thiết kế nhanh các trang Admin (xem chi tiết "Scaffold"
ở phần cuối).
Cấu hình
Trước hết, chúng ta hãy mở Web.config (hoặc App.config cho dự án không phải web), thiết lập cấu hình cho SubSonic như sau:
Tiếp theo, thiết lập kết nối cơ sở dữ liệu:
Sau 2 bước trên, chúng ta sẽ định nghĩa các Provider, mỗi Provider được kết nối với một cơ sở dữ liệu:
SubsonicService >Trên đây là thông tin cơ bản nhất để bắt đầu làm việc với SubSonic. Thông tin này được sử dụng cho hai trường hợp:
• Kích hoạt SubSonic để sinh mã cho các object, scaffold... tại thời điểm biên dịch.
• Thực thi các tương tác với CSDL tại thời điểm chạy chương trình.
• Kích hoạt SubSonic để sinh mã cho các object, scaffold... tại thời điểm biên dịch.
• Thực thi các tương tác với CSDL tại thời điểm chạy chương trình.
Query Engine
SubSonic cung cấp dịch vụ Query Engine cho phép tương tác dữ liệu thông qua một loạt các đối tượng và phương thức có sẵn.
Như đã nói ở trên, mỗi Provider thiết lập kết nối với một CSDL. Khi đang thực thi chương trình có thể chuyển đổi dễ dàng các Provider này. Đoạn mã thí dụ dưới đây sẽ chỉ ra cách thức SubSonic làm việc với CSDL như thế nào:
SubSonic.Query query1 = new SubSonic.Query("Products", "CommerceDataProvider"); //Tham số đầu tiên là tên bảng, tham số thứ hai là tên Provider sẽ được kết nối với SubSonic thông qua khai báo trong web.config.
SubSonic cung cấp dịch vụ Query Engine cho phép tương tác dữ liệu thông qua một loạt các đối tượng và phương thức có sẵn.
Như đã nói ở trên, mỗi Provider thiết lập kết nối với một CSDL. Khi đang thực thi chương trình có thể chuyển đổi dễ dàng các Provider này. Đoạn mã thí dụ dưới đây sẽ chỉ ra cách thức SubSonic làm việc với CSDL như thế nào:
SubSonic.Query query1 = new SubSonic.Query("Products", "CommerceDataProvider"); //Tham số đầu tiên là tên bảng, tham số thứ hai là tên Provider sẽ được kết nối với SubSonic thông qua khai báo trong web.config.
query1.Schema = SubSonic.Query.BuildTableSchema("Products");
query1.WHERE("ProductName", SubSonic.Comparison.Equals, "BlackBerry");
query1.WHERE("ProductName", SubSonic.Comparison.Equals, "BlackBerry");
DataSet ds = query1.ExecuteDataSet();
string debugInfo = query1.Inspect(); //Trả về HTML markups bao gồm các thông tin như thời gian thực thi truy vấn, kết quả truy vấn... Thông tin này rất có ích khi cần debug chương trình
Response.Write(debugInfo); //Cuối cùng, ghi thông tin cần debug ra màn hình
Để hiểu thêm về cách thức Query Engine hoạt động, bạn có thể bắt đầu với dự án đơn giản qua video trực tuyến tại địa chỉ: http://www.wekeroad.com/ss_setup2.html
string debugInfo = query1.Inspect(); //Trả về HTML markups bao gồm các thông tin như thời gian thực thi truy vấn, kết quả truy vấn... Thông tin này rất có ích khi cần debug chương trình
Response.Write(debugInfo); //Cuối cùng, ghi thông tin cần debug ra màn hình
Để hiểu thêm về cách thức Query Engine hoạt động, bạn có thể bắt đầu với dự án đơn giản qua video trực tuyến tại địa chỉ: http://www.wekeroad.com/ss_setup2.html
Active Record Pattern
SubSonic sinh mã theo mô hình Active Record Pattern, tức là mỗi một Table hoặc View sẽ được ánh xạ vào một đối tượng (Active Record), đối tượng này tương tác với Table/View/SP thông qua các hàm chuẩn Load(), Save()... Xem thí dụ sau:
product = new Product()
product.Name = "Your product name"
product.Price = 123.45
product.Save()
SubSonic sinh mã theo mô hình Active Record Pattern, tức là mỗi một Table hoặc View sẽ được ánh xạ vào một đối tượng (Active Record), đối tượng này tương tác với Table/View/SP thông qua các hàm chuẩn Load(), Save()... Xem thí dụ sau:
product = new Product()
product.Name = "Your product name"
product.Price = 123.45
product.Save()
Các đối tượng này còn đựơc gọi là "Wrapper Object".
Tất cả các đối tượng sinh ra từ SubSonic đều kế thừa ActiveRecord hoặc ActiveList (đối với các đối tượng dạng danh sách - Collection). SubSonic đưa vào ActiveRecord tất cả các phương thức chuẩn, bao gồm: Save(), Delete(), Destroy(), FetchAll(), FetchByParameter()...
Tất cả các đối tượng sinh ra từ SubSonic đều kế thừa ActiveRecord hoặc ActiveList (đối với các đối tượng dạng danh sách - Collection). SubSonic đưa vào ActiveRecord tất cả các phương thức chuẩn, bao gồm: Save(), Delete(), Destroy(), FetchAll(), FetchByParameter()...
SubSonic sinh mã như thế nào?
Có rất nhiều cách sinh mã trong SubSonic, bạn có thể sử dụng một trong các cách sau:
Có rất nhiều cách sinh mã trong SubSonic, bạn có thể sử dụng một trong các cách sau:
• Command-line:
Trực tiếp trên MS Dos hoặc chạy tệp batch. Một cách khác là mở
External Tools trong IDE và đặt đường dẫn đến SubSonic, sau đó kéo vào
Toolbar như dưới đây:
Trên toolbar có thể thấy 4 chức năng được bổ sung, gồm chức năng tạo DAL, chức năng thiết kế Scaffold (xem chi tiết "Scaffold" ở phần cuối bài viết) và hai chức năng liên quan đến Database Migration hay DB Versioning (quản lý phiên bản cơ sở dữ liệu).
• Macro: Tích hợp SubSonic với Visual Studio 2005. Với macro, bạn có thể tạo ra DAL chỉ với một lần click chuột.
• SubSonic Add-in, SubSonic Custom Tool: Có thể tích hợp SubSonic vào Visual Studio 2005 như một Add-in hoặc Custom Tool.
Trên toolbar có thể thấy 4 chức năng được bổ sung, gồm chức năng tạo DAL, chức năng thiết kế Scaffold (xem chi tiết "Scaffold" ở phần cuối bài viết) và hai chức năng liên quan đến Database Migration hay DB Versioning (quản lý phiên bản cơ sở dữ liệu).
• Macro: Tích hợp SubSonic với Visual Studio 2005. Với macro, bạn có thể tạo ra DAL chỉ với một lần click chuột.
• SubSonic Add-in, SubSonic Custom Tool: Có thể tích hợp SubSonic vào Visual Studio 2005 như một Add-in hoặc Custom Tool.
• SubStage:
Đây là một chương trình khá mạnh có thể tạo ra tất cả những gì bạn
muốn, bao gồm cả thông tin về Web.config và mã chương trình như Object
Wrapper (Model, Controller), Scaffold... Bạn sẽ không phải làm gì cả
ngoại trừ "copy/paste" mã vừa tạo ra vào dự án của bạn (xem thêm phần
SubStage ở phần cuối)
Partial Class
SubSonic được xây dựng trên .NET 2.0 trở đi, do đó sẽ không phải lo lắng liệu có thể viết đè lên các đối tượng được SubSonic tạo ra, vì .NET phiên bản 2.0 trở đi hỗ trợ việc xây dựng các đối tượng mở rộng (Partial). Mỗi "Wrapper Object" sẽ có 2 phần, một phần do SubSonic tạo ra, phần còn lại (partial class) là nơi bổ sung các đoạn mã mới mà không ảnh hưởng đến hoạt động của toàn bộ hệ thống.
SubSonic được xây dựng trên .NET 2.0 trở đi, do đó sẽ không phải lo lắng liệu có thể viết đè lên các đối tượng được SubSonic tạo ra, vì .NET phiên bản 2.0 trở đi hỗ trợ việc xây dựng các đối tượng mở rộng (Partial). Mỗi "Wrapper Object" sẽ có 2 phần, một phần do SubSonic tạo ra, phần còn lại (partial class) là nơi bổ sung các đoạn mã mới mà không ảnh hưởng đến hoạt động của toàn bộ hệ thống.
Audit Field
Trong các thiết kế CSDL ngày nay, các trường Audit Field có mặt gần như khắp mọi nơi. Audit Field làm tăng dữ liệu dư thừa nhưng hiệu quả đem lại thì không thể không tính đến, đó là đẩy mạnh tốc độ xử lý của ứng dụng và đảm bảo an toàn dữ liệu. Có thể nhận thấy rõ nhất điều này khi sử dụng Audit Field để xử lý các vấn đề xung đột khi có nhiều người cập nhật cùng một dữ liệu.
SubSonic tận dụng khả năng đem lại của Audit Field và đưa ra thiết kế chuẩn cho các trường Audit Field như sau:
Trong các thiết kế CSDL ngày nay, các trường Audit Field có mặt gần như khắp mọi nơi. Audit Field làm tăng dữ liệu dư thừa nhưng hiệu quả đem lại thì không thể không tính đến, đó là đẩy mạnh tốc độ xử lý của ứng dụng và đảm bảo an toàn dữ liệu. Có thể nhận thấy rõ nhất điều này khi sử dụng Audit Field để xử lý các vấn đề xung đột khi có nhiều người cập nhật cùng một dữ liệu.
SubSonic tận dụng khả năng đem lại của Audit Field và đưa ra thiết kế chuẩn cho các trường Audit Field như sau:
public class ReservedColumnName
{
public const string CREATED_BY = "CreatedBy";
public const string CREATED_ON = "CreatedOn";
public const string DELETED = "Deleted";
public const string IS_ACTIVE = "IsActive";
public const string IS_DELETED = "IsDeleted";
public const string MODIFIED_BY = "ModifiedBy";
public const string MODIFIED_ON = "ModifiedOn";
}
SubSonic khuyến nghị các bảng CSDL nên được thiết kế với các trường dành riêng này. Vậy SubSonic xử lý các trường Audit Field như thế nào?
Lấy thí dụ về trường "IsDeleted", khi bạn gọi lệnh xóa một bản ghi (phương thức Delete() của ActiveRecord), SubSonic sẽ không xóa bản ghi hoàn toàn ra khỏi database, mà sẽ đánh dấu bản ghi này bằng cách gán giá trị IsDeleted = True. Nếu muốn xóahoàn toàn bản ghi này ra khỏi database, phương thức Destroy() sẽ thực hiện điều đó.
{
public const string CREATED_BY = "CreatedBy";
public const string CREATED_ON = "CreatedOn";
public const string DELETED = "Deleted";
public const string IS_ACTIVE = "IsActive";
public const string IS_DELETED = "IsDeleted";
public const string MODIFIED_BY = "ModifiedBy";
public const string MODIFIED_ON = "ModifiedOn";
}
SubSonic khuyến nghị các bảng CSDL nên được thiết kế với các trường dành riêng này. Vậy SubSonic xử lý các trường Audit Field như thế nào?
Lấy thí dụ về trường "IsDeleted", khi bạn gọi lệnh xóa một bản ghi (phương thức Delete() của ActiveRecord), SubSonic sẽ không xóa bản ghi hoàn toàn ra khỏi database, mà sẽ đánh dấu bản ghi này bằng cách gán giá trị IsDeleted = True. Nếu muốn xóahoàn toàn bản ghi này ra khỏi database, phương thức Destroy() sẽ thực hiện điều đó.
So sánh SubSonic với NHibernate
NHibernate không tự sinh ra mã mà cần đến các chương trình bên ngoài (thí dụ CodeSmidth) định nghĩa template cho NHibernate trước khi sinh mã. Ngược lại SubSonic tự động hoá hoàn toàn và có thể cho phép sửa đổi template theo ý muốn. Hơn nữa SubSonic là một dự án nguồn mở hoàn toàn miễn phí và Microsoft dự kiến sẽ tích hợp SubSonic như một thành phần trong bộ công cụ .NET Studio.
So với các framework khác như Hibernate, LINQ... thì SubSonic dễ cấu hình hơn và có kiến trúc đơn giản, ổn định. Chính vì lý do đó mà SubSonic được xem như "framework nhẹ”.
NHibernate không tự sinh ra mã mà cần đến các chương trình bên ngoài (thí dụ CodeSmidth) định nghĩa template cho NHibernate trước khi sinh mã. Ngược lại SubSonic tự động hoá hoàn toàn và có thể cho phép sửa đổi template theo ý muốn. Hơn nữa SubSonic là một dự án nguồn mở hoàn toàn miễn phí và Microsoft dự kiến sẽ tích hợp SubSonic như một thành phần trong bộ công cụ .NET Studio.
So với các framework khác như Hibernate, LINQ... thì SubSonic dễ cấu hình hơn và có kiến trúc đơn giản, ổn định. Chính vì lý do đó mà SubSonic được xem như "framework nhẹ”.
SubSonic + ASP.MVC: Sự kết hợp kiến trúc trên nền .NET
SubSonic dựa trên MVC và MVC vận dụng SubSonic để xây dựng tầng DAL. Đó là một mối quan hệ khăng khít giữa MVC và SubSonic.
Model: Theo định nghĩa của MVC thì Model sẽ quản lý thông tin và thông báo cho các Observer khi thông tin đó thay đổi. Lợi dụng đặc điểm này, SubSonic xây dựng các Model trong đó thiết lập ánh xạ với các Table/View. Các thuộc tính cơ bản của ActiveRecord là: IsLoaded, IsNew, IsDirty sẽ nói lên trạng thái của thông tin được thay đổi ra sao.
Controller: Trong mô hình MVC, Controller chịu trách nhiệm kết nối các tương tác người dùng với phản hồi của ứng dụng. Controller nhận đầu vào từ View và điều khiển Model để thực hiện các tác vụ tương ứng. Controller kết nối các Model khác nhau và quản lý nguồn dữ liệu của các Model đó (do đó còn gọi là Object Data Source Controller). Cũng như Model, với mỗi Table/View, SubSonic tự động tạo ra Controller tương ứng. Ngoài ra, Controller có thể được mở rộng (partial class) với các "business rule" đặc thù cho từng module.
Như vậy, đối với mỗi một Table/View, sẽ có 3 đối tượng được tự động tạo ra bởi SubSonic: Hai đối tượng Model (một kế thừa ActiveRecord và một kế thừa ActiveList) và một đối tượng Controller.
Model: Theo định nghĩa của MVC thì Model sẽ quản lý thông tin và thông báo cho các Observer khi thông tin đó thay đổi. Lợi dụng đặc điểm này, SubSonic xây dựng các Model trong đó thiết lập ánh xạ với các Table/View. Các thuộc tính cơ bản của ActiveRecord là: IsLoaded, IsNew, IsDirty sẽ nói lên trạng thái của thông tin được thay đổi ra sao.
Controller: Trong mô hình MVC, Controller chịu trách nhiệm kết nối các tương tác người dùng với phản hồi của ứng dụng. Controller nhận đầu vào từ View và điều khiển Model để thực hiện các tác vụ tương ứng. Controller kết nối các Model khác nhau và quản lý nguồn dữ liệu của các Model đó (do đó còn gọi là Object Data Source Controller). Cũng như Model, với mỗi Table/View, SubSonic tự động tạo ra Controller tương ứng. Ngoài ra, Controller có thể được mở rộng (partial class) với các "business rule" đặc thù cho từng module.
Như vậy, đối với mỗi một Table/View, sẽ có 3 đối tượng được tự động tạo ra bởi SubSonic: Hai đối tượng Model (một kế thừa ActiveRecord và một kế thừa ActiveList) và một đối tượng Controller.
ASP.NET MVC Web Application Template
Microsoft
cung cấp hẳn một template dành riêng cho các dự án theo kiến trúc MVC
(có thể vào website của Microsoft để tải về MVC Template). Lưu ý, bất
kỳ dự án nào không phải MVC vẫn có thể tích hợp được SubSonic. Tuy
nhiên việc xây dựng dự án dựa trên MVC Template có thuận lợi là bạn
không phải quan tâm đến toàn bộ kiến trúc của dự án, việc duy nhất bạn
phải làm là khởi động SubSonic.
Các bạn có thể tải về video hướng dẫn chi tiết cách thức tích hợp SubSonic với MVC Template tại địa chỉ: http://silverlight.services.live.com...ntro/video.wmv
Các bạn có thể tải về video hướng dẫn chi tiết cách thức tích hợp SubSonic với MVC Template tại địa chỉ: http://silverlight.services.live.com...ntro/video.wmv
Scaffold: Giàn giáo trong xây dựng phần mềm
Giả sử bạn có tới 50 bảng CSDL và các lập trình viên (LTV), kiểm tra viên (KTV) thường xuyên thao tác với dữ liệu các bảng này để kiểm tra công việc của họ. Tuy nhiên bạn không muốn LTV và KTV thao tác dữ liệu trực tiếp trong CSDL vì nhiều rủi ro. Phương pháp an toàn nhất là dựng lên các giao diện "tạm" với đầy đủ các chức năng CRUD (Create, Read, Update, Delete) giống như một trang Admin để bất cứ ai cũng có thể thay đổi được. Tuy nhiên việc xây dựng 50 trang tạm như thế làm tốn thời gian và công sức. Thuật ngữ "Scaffold" ra đời để tái hiện các trang tạm đó giống như các "giàn giáo" trong ngành xây dựng, giúp các LTV, KTV đẩy mạnh tiến độ dự án. Và khi dự án kết thúc, các giàn giáo đó sẽ được gỡ bỏ và rất có thể, một số trong số đó được giữ lại hoặc thậm chí nâng cấp thành các trang Admin.
Giả sử bạn có tới 50 bảng CSDL và các lập trình viên (LTV), kiểm tra viên (KTV) thường xuyên thao tác với dữ liệu các bảng này để kiểm tra công việc của họ. Tuy nhiên bạn không muốn LTV và KTV thao tác dữ liệu trực tiếp trong CSDL vì nhiều rủi ro. Phương pháp an toàn nhất là dựng lên các giao diện "tạm" với đầy đủ các chức năng CRUD (Create, Read, Update, Delete) giống như một trang Admin để bất cứ ai cũng có thể thay đổi được. Tuy nhiên việc xây dựng 50 trang tạm như thế làm tốn thời gian và công sức. Thuật ngữ "Scaffold" ra đời để tái hiện các trang tạm đó giống như các "giàn giáo" trong ngành xây dựng, giúp các LTV, KTV đẩy mạnh tiến độ dự án. Và khi dự án kết thúc, các giàn giáo đó sẽ được gỡ bỏ và rất có thể, một số trong số đó được giữ lại hoặc thậm chí nâng cấp thành các trang Admin.
Một
đặc điểm dễ thấy của Scaffold là, không giống như các trang tương tác
trực tiếp với khách hàng, các trang Admin không có yêu cầu quá cao về
giao diện vì chỉ hoạt động chủ yếu ở "hậu trường", do đó thiết kế cũng
rất đơn giản, sơ sài. Ban đầu Scaffold chỉ được sử dụng cho nội bộ nhóm
các LTV và KTV trong suốt quá trình phát triển dự án, về sau các phiên
bản mới của các framework đều ra sức phát triển công cụ đi kèm để nâng
cấp Scaffold thành các trang Admin hoàn thiện hơn về mặt giao diện lẫn
chức năng để bất cứ người dùng nào (có quyền) cũng đều có thể truy cập
được như người quản trị hệ thống, những người quản lý...
Hiện nay các framework lớn như Ruby-On-Rails, MonoRail... đều cung cấp Scaffold giúp đẩy mạnh xây dựng các trang Admin. Đặc biệt với Scaffold trong SubSonic, bạn không cần phải viết một dòng mã nào.
Ngoài các chức năng cơ bản CRUD, SubSonic còn trang bị cho Scaffold các control tiện dụng như: GridView, Paging, Calendar, DropDown...
Scaffold trong SubSonic rất đa đạng và được phân loại như sau:
• QuickTable: Hiển thị toàn bộ dữ liệu của một bảng trên GridView, không có đầy đủ CRUD. Đây là control đơn giản nhất của SubSonic.
• Các User Control thành phần bao gồm: DropDown, CalendarControl, ManyManyList, RadioButtons.
• Scaffold: Có đầy đủ CRUD và chứa tất cả các control thành phần của SubSonic.
Hiện nay các framework lớn như Ruby-On-Rails, MonoRail... đều cung cấp Scaffold giúp đẩy mạnh xây dựng các trang Admin. Đặc biệt với Scaffold trong SubSonic, bạn không cần phải viết một dòng mã nào.
Ngoài các chức năng cơ bản CRUD, SubSonic còn trang bị cho Scaffold các control tiện dụng như: GridView, Paging, Calendar, DropDown...
Scaffold trong SubSonic rất đa đạng và được phân loại như sau:
• QuickTable: Hiển thị toàn bộ dữ liệu của một bảng trên GridView, không có đầy đủ CRUD. Đây là control đơn giản nhất của SubSonic.
• Các User Control thành phần bao gồm: DropDown, CalendarControl, ManyManyList, RadioButtons.
• Scaffold: Có đầy đủ CRUD và chứa tất cả các control thành phần của SubSonic.
Bạn có thể kéo thả Scaffold vào giao diện tùy theo mục đích sử dụng,
thí dụ nếu muốn tương tác với dữ liệu của bảng Orders trên GridView
thì có thể viết trên ASP.NET như sau:Control này sẽ vẽ một bảng chứa
toàn bộ dữ liệu của Orders và thiết lập trang soạn thảo (Editor) cho
các chức năng Create, Update, Delete.
Chú ý:
Đối với các bảng nối (Associate Table), SubSonic bổ sung control có
tên là "Many-To-Many" vào Scaffold, nhờ đó người dùng có thể nhập dữ
liệu vào bảng nối một cách dễ dàng. Thí dụ bảng OrderDetails trong CSDL
của Northwind sẽ là bảng nối của hai bảng Order và Product.
SubStage
SubSonic có thể tự động thiết kế toàn bộ các trang Admin, có nghĩa là bạn không phải mất một giây nào để làm điều đó. SubSonic cung cấp một chương trình quản lý với giao diện trực quan có tên là SubStage với hai chức năng chính: quản lý thông tin cấu hình và sinh mã cho DAL (bao gồm cả mã cho Scaffold). Tất cả những gì bạn phải làm chỉ là chọn Database, Provider và Table mà bạn sẽ tương tác.
SubSonic có thể tự động thiết kế toàn bộ các trang Admin, có nghĩa là bạn không phải mất một giây nào để làm điều đó. SubSonic cung cấp một chương trình quản lý với giao diện trực quan có tên là SubStage với hai chức năng chính: quản lý thông tin cấu hình và sinh mã cho DAL (bao gồm cả mã cho Scaffold). Tất cả những gì bạn phải làm chỉ là chọn Database, Provider và Table mà bạn sẽ tương tác.
Có thể tải về video hướng dẫn sử dụng SubStage tại địa chỉ: http://subsonicproject.com/2-1-pakala/using-substage/
Trước khi bước sang phần tiếp theo, hãy cùng tổng kết lại những gì SubSonic có thể tạo ra:
• DAL:
- "Active Record Wrapper" cho Table, View và SP
- Strongly Typed Collection classes
- Object Data Source Controllers
• Source code (SubSonic config, Scaffold...)
Trước khi bước sang phần tiếp theo, hãy cùng tổng kết lại những gì SubSonic có thể tạo ra:
• DAL:
- "Active Record Wrapper" cho Table, View và SP
- Strongly Typed Collection classes
- Object Data Source Controllers
• Source code (SubSonic config, Scaffold...)
Thư viện hàm tiện ích
Bên cạnh Scaffold và User Control, SubSonic còn cung cấp một thư viện khá lớn bao gồm các hàm xử lý ngày-tháng nâng cao, các hàm xử lý file nâng cao, các hàm xử lý string/number/validation, các hàm thao tác web (thí dụ như mở/đọc trang web, thực hiện DNS Lookup...)
Bên cạnh Scaffold và User Control, SubSonic còn cung cấp một thư viện khá lớn bao gồm các hàm xử lý ngày-tháng nâng cao, các hàm xử lý file nâng cao, các hàm xử lý string/number/validation, các hàm thao tác web (thí dụ như mở/đọc trang web, thực hiện DNS Lookup...)
Ứng dụng của SubSonic
SubSonic ngày càng được sử dụng rộng rãi và được xem là framework tốt nhất để xây dựng DAL. Có thể kể đến một số phần mềm nguồn mở cũng như nguồn đóng như:
• DashCommerce (www.dashcommerce.com)
• Commerce for Umbraco: http://www.codeplex.com/commerce4umbraco
• Club Starter Kit: http://www.codeplex.com/ClubStarterKit
• DotNetKick: http://www.dotnetkicks.com
• FranchiseBlast: http://www.lavablast.com/en/lb_franchiseblast.aspx
Các nhà phát triển DotNetNuke (hay DNN, framework nổi tiếng cho Portal trên nền .NET) cũng đang tích hợp SubSonic vào một số module và có thể trong tương lai gần sẽ tích hợp SubSonic vào toàn bộ DNN.
SubSonic ngày càng được sử dụng rộng rãi và được xem là framework tốt nhất để xây dựng DAL. Có thể kể đến một số phần mềm nguồn mở cũng như nguồn đóng như:
• DashCommerce (www.dashcommerce.com)
• Commerce for Umbraco: http://www.codeplex.com/commerce4umbraco
• Club Starter Kit: http://www.codeplex.com/ClubStarterKit
• DotNetKick: http://www.dotnetkicks.com
• FranchiseBlast: http://www.lavablast.com/en/lb_franchiseblast.aspx
Các nhà phát triển DotNetNuke (hay DNN, framework nổi tiếng cho Portal trên nền .NET) cũng đang tích hợp SubSonic vào một số module và có thể trong tương lai gần sẽ tích hợp SubSonic vào toàn bộ DNN.
Đới với những người mới bắt đầu tìm hiểu SubSonic, có thể tham khảo một trong hai gói ứng dụng đơn giản nhất:
• "SubSonic Starter Site", tải về tại địa chỉ:
• "Blog Engine":
Xin giới thiệu thêm một video trình bày về "SubSonic Starter Site" tại địa chỉ:
0 comments:
Post a Comment