report dnn portal
TRANSCRIPT
Cơ bản về Portal
1.1. Portal là gì?
Portal, tên đầy đủ là Web Portal, là một hệ thống hoạt động trên Web, định danh và xác thực người dùng đăng nhập, từ đó sẽ cung cấp một giao diện web để người dùng dễ dàng truy cập, khai thác thông tin và dịch vụ cũng như thao tác, tuỳ biến các công việc tác nghiệp của mình một cách nhanh chóng và đơn giản. Portal có các tính năng giúp người quản trị thu thập, quản lý nhiều nguồn thông tin khác nhau, từ đó phân phối chúng dưới dạng các dịch vụ cho từng người dùng khác nhau tuỳ thuộc vào nhóm quyền, vào nhu cầu cũng như mục đích của người dùng đó. Portal thực hiện việc này hết sức linh động, từ những công việc như tìm xem và đặt mua sách trong một kho hàng trực tuyến, xem và thay đổi thông tin về sinh viên và giáo viên trên các ứng dụng quản lý giảng dạy, đến việc đăng và chia sẻ các thông tin, tài nguyên, bài viết trên các diễn dàn hay cung cấp việc truy cập thống nhất và thuận lợi đến các thông tin nội bộ trong một website của công ty... Portal như một cổng vào vạn năng cho người dùng tìm kiếm thông tin và tác nghiệp một cách thuận lợi và dễ dàng.
1.2. Sự phát triển của web portal
Khái niệm “Web Portal” đã xuất hiện từ khá lâu, chỉ sau khi ra đời WWW một thời gian ngắn. Ban đầu, các website chỉ như các báo quảng cáo điện tử, chứa các thông tin của một doanh nghiệp để khách hàng của họ có thể truy cập để xem và theo dõi một cách thuận tiện. Lúc đó, Portal được dùng để chỉ một trang chủ, chứa các liên kết đến các nội dung trong một website nào đó. Ngoài ra, nó còn chứa một công cụ tìm kiếm nội bộ, cho phép người dùng dễ dàng tìm các thông tin nằm trong nội dung các trang web. Chính vì vậy, cái tên Web Portal mang ý nghĩa: một cái “cổng” để truy nhập vào website. Web Portal tựa như một danh bạ Web (Web directory) liên kết với một search engine đơn giản, tất cả chỉ dùng nội bộ trong một website.
Sau thời gian đầu, các website không chỉ mang ý nghĩa đại diện để giới thiệu của các công ty, chúng trở thành những công cụ tác nghiệp trực tuyến rất thuận tiện dành cho cả khách hàng, đối tác và các nhân viên cũng như ban quản trị doanh nghiệp. Do đó các tính năng quan trọng nên tích hợp vào một website như các tính năng đăng nhập và xác thực người dùng, các tính năng quản lý nội dung, tính năng cá nhân hoá, đa ngôn ngữ cũng như các tính năng tác nghiệp cụ thể đối với từng website. Web Portal cung cấp khả năng tích hợp các tính năng này một cách dễ dàng thành một trang web duy nhất. Web Portal đầu tiên kiểu này là Americal Online (AOL - _http://www.aol.com/ )
Hiện tại, Web Portal không chỉ là một “cổng vào”, dẫn đường người dùng truy cập website, mà đã trở thành một siêu website, nghĩa là ngoài chứa đựng mọi thông tin và dịch vụ cần có như một website thông thường, nó còn có khả năng quản trị giao diện cũng như nội dung của nhiều website, thêm bớt không những nội dung mới mà còn các dịch vụ mới, tích hợp các module thông dụng nhất như các forum, chat room, blog hay RSS feed…và quan trọng là, cung cấp việc truy cập các nguồn thông tin rất đa dạng và khác nhau này chỉ thông qua một lần đăng nhập duy nhất (single sign-on).
Bên cạnh đó khả năng lưu trữ lớn với CSDL cho phép lưu trữ khối lượng thông tin lớn (hàng GB) dưới nhiều hình thức: text, picture, audio, video…
Khả năng bảo mật cao với sự áp dụng các giao thức bảo mật tiên tiến nhất, tất cả các thông tin được mã hóa trước khi truyền đi. Hệ thống được bảo mật ở nhiều mức như: Mức hệ thống, mức cơ sở dữ liệu, mức chương trình.
Một Web Portal nổi tiếng hiện nay là My Yahoo! (_http://my.yahoo.com/) của Yahoo, người dùng chỉ cần đăng nhập một lần duy nhất trong trang này để truy cập vào một trang web riêng mà Yahoo đã thiết kế sẵn, với nhiều module có sẵn như tin tức, bản tin thời tiết, bản đồ… Ngoài ra ở trang My Yahoo cũng có các link liên kết đến các ứng dụng web của Yahoo quen thuộc như Messenger, Mail, Group, Blog, Music… và người dùng sẽ không cần phải đăng nhập lại.
Sang Tiếng Việt, Web Portal được dịch là “Cổng giao tiếp điện tử”, “Cổng giao dịch điện tử” hoặc ngắn gọn hơn: “Cổng điện tử”. Tuy nhiên, cũng như tên tiếng Anh của chúng, các từ này thật sự chưa thể phản ánh hết được chính xác thế nào là một Portal
Mô hình portal
Industry
Enterprise, Legacy &
Business IntelligenceUser Data
and
InformationCommunication
&
Collaboration
Web Pages & Links
Process Automation
Servcies
Supplier
Government
Customer
Wireless
Web
Hình ảnh về một portal
3. Các loại Portal
Có nhiều cách phân loại Portal, ở đây phân loại theo mục đích sử dụng cũng như quy mô thì có thể chia các Portal hiện có thành ba loại:
3.1. Các Portal công cộng (Puclic Portal)
Các Portal loại này thường giống như khái niệm về Portal ở những thời kỳ đầu, được thiết kế ra dành cho một lượng rất lớn người dùng dễ dàng truy cập vào các ứng dụng trên web (web-based) khác thông qua các liên kết và hộp tìm kiếm chỉ bằng một lần đăng nhập duy nhất. Nổi tiếng nhất trong loại Portal này là các Portal My Yahoo, AOL hay Excite. Các Portal kiểu này hướng đến đại đa số người dùng, do vậy chúng thường tập trung vào khả năng cá nhân hoá (Personalization), đa ngôn ngữ (Localization), phát triển các tính năng phổ biến sao cho người dùng có thể sử dụng dễ dàng. Khả năng quản lý số lượng người dùng rất lớn cũng như cho phép tìm kiếm nhanh thông tin từ một lượng dữ liệu khổng lồ là thế mạnh của loại portal này tuy nhiên vì phục vụ số đông nên chúng không dành cho các công việc nghiệp vụ cụ thể nào cả.
3.2. Các Portal tác nghiệp (Enterprise Portal)
Các Portal loại này quản lý số lượng người dùng không nhiều bằng các loại Portal công cộng, nhưng cũng rất lớn. Các Portal loại này chuyên dùng cho các doanh nghiệp lớn, phục vụ cho tác nghiệp, chuyên làm các công việc nghiệp vụ như quản lý mạng lưới bán lẻ, ngân hàng, website bán hàng cỡ lớn hay quản lý tài nguyên công ty... Do vậy, chúng được thiết kế rất tốt, thực hiện được các nghiệp vụ phức tạp, liên kết nhiều kiểu dữ liệu khác nhau. Các Portal này rất đắt, chỉ những công ty vừa và lớn trên thế giới mới sử dụng. Ở Việt Nam, hầu hết các hãng dùng loại này là các công ty đa quốc gia hay các
công ty liên doanh lớn. Các Portal này không khác gì các phần mềm Business Solution (phần mềm giải pháp nghiệp vụ) như Microsoft Solomon hay Lotus Domino, chỉ khác là chúng hoạt động trong môi trường Web. Có thể kể ra đây một số các Portal loại này - loại Portal chuyên nghiệp nhất - như Microsoft SharePoint, Oracle ApplicationServer, IBM WebSphere...
3.3. Các Portal Website (Website Portal)
Các Portal kiểu này thường dùng để tạo ra các Website, chính xác hơn là các Website có thể tùy biến (customizable website). Các Portal này cung cấp các tính năng rất cơ bản và chung, giúp các nhà phát triển web có thể dễ dàng tạo ra một website cho riêng mình. Các Portal này hỗ trợ các tính năng cá nhân hoá và đa ngôn ngữ ở mức vừa phải, có thể thêm vào các mô đun tác nghiệp không quá phức tạp. Để làm được điều này, các Portal được mở một phần hoặc hoàn toàn mã nguồn, để người dùng Portal (thường là quản trị Website) có thể tự xây dựng các mô đun, tất nhiên là theo chuẩn của Portal, để tích hợp vào website của mình hoặc thậm chí đem bán cho các site khác có cùng nguồn gốc. Các portal này tương đối đơn giản, chỉ sử dụng một vài cơ sở dữ liệu phổ biến, tuy nhiên cũng không kém phần linh động khi tuỳ biến giao diện cũng như thao tác nghiệp vụ.
Hiện nay các Portal kiểu này được sử dụng nhiều nhất, cả ở trên thế giới cũng như Việt Nam. Các Portal này thường miễn phí hoặc được bán với giá rất rẻ. Các công ty thiết kế web thường chọn các Portal này để mở rộng, tạo ra các website cho khách hàng mà không mất nhiều công sức để nghiên cứu cũng như cài đặt. Ở Việt nam, các Portal Website hay được dùng nhiều nhất là uPortal, Liferay, JetSpeed, ExoPlatform và DotNetNuke. Bốn Portal đầu được viết bằng Java, và đã được thương mại hoá (vẫn miễn phí các phiên bản cũ hơn).
4. Tính năng của hệ thống Portal cần xây dựng
Hệ thống cần xây dựng có các tính năng như sau:4.1. Đăng nhập một lần (Single Sign-On - SSO)
Để truy cập vào dữ liệu và dịch vụ khác nhau, người dùng chỉ cần đăng nhập một lần duy nhất. Hệ thống Portal thực hiện điều này thông qua quá trình quản lý phiên (Session Management). Thông qua quá trình này, người dùng dễ dàng truy cập và thao tác dữ liệu, nhưng không phải lo lắng gì về mặt an ninh bảo mật vì Portal đã dùng những công nghệ bảo mật an toàn nhất ngầm phía dưới một phiên làm việc từ khi người dùng đăng nhập đến khi đăng xuất.
4.2. Cá nhân hoá (Personalization)
Khi người dùng đăng ký với hệ thống, họ sẽ được cấp một tài khoản. Mỗi tài khoản người dùng đăng nhập vào đều được cấp cho một “khung trời riêng”, họ có cảm giác như là một website của riêng mình, họ có thể tuỳ biến được giao diện tuỳ theo ý thích, thêm bớt các mô đun, hình ảnh… giống như post hay delete một bài viết của mình trên forum vậy. Khả năng này còn thể hiện ở chỗ: nhà quản trị website có thể trực quan hoá các công việc thêm bớt, thay đổi vị trí các mô đun mà không động đến một dòng HTML hay mã nguồn của Website mình. Điều này có được là do Portal sử dụng các công nghệ bố trí giao diện động như DHTML, CSS, XSL…
4.3. Tự hoạt động (Self-services)
Các mô đun của hệ thống Portal - được coi là phần tử cơ bản nhất cấu tạo nên Portal - có khả năng tự hoạt động một cách độc lập, không phụ thuộc hay ảnh hưởng các mô đun khác. Mỗi khi được thêm vào, chúng có nguồn dữ liệu khác nhau, vòng đời khác nhau và phương thức hoạt động khác hẳn nhau. Để có thể tích hợp chúng lại mà không ảnh hưởng gì đến toàn bộ hệ thống, các mô đun phải có một chuẩn riêng khi viết.
4.4. Đa nguồn dữ liệu (Multi Data Sources) và Đa nền tảng (Multi Platforms)
Một trong những khả năng quan trọng khác của hệ thống Portal là chúng có thể sử dụng kết hợp nhiều nguồn dữ liệu khác nhau. Các dữ liệu này có thể ở dạng file, dạng cơ sở dữ liệu quan hệ, dạng cơ sở dữ liệu hướng đối tượng, thậm chí ngay trong dạng cơ sở dữ liệu quan hệ, Portal có thể chấp nhận nhiều loại hệ quản trị cơ sở dữ liệu khác nhau. Bởi vì hệ thống Portal được xây dựng theo kiến trúc 3 lớp, phân tách việc kết nối cơ sở dữ liệu, việc tác nghiệp và việc hiển thị giao diện ra thành ba tầng độc lập.Hệ thống Portal co tính năng đa nền tảng, có thể chạy trên các nền hệ điều hành khác nhau, các Web Server khác nhau, các nền web hay mobile. Bởi vì hệ thống Portal kế thùa từ Liferay Portal – là Portal có kiến trúc mở, thống nhất, sử dụng các ngôn ngữ độc lập nền tảng, sử dụng các chuẩn chuyên trao đổi và xây dựng dịch vụ như các công nghệ Web Service hay Service Oriented Architecture (SOA).
4.5. Đa ngôn ngữ (Localization)
Tính năng đa ngôn ngữ không được hỗ trợ trong hệ thống Portal cần xây dựng vì đây là hệ thống sử dụng cho cơ quan, đơn vị của Việt Nam nên nó hoàn toàn thuần tiếng Việt. Nhưng như thế không có nghĩa là nó không có tính năng đa ngôn ngữ.
5. Các dịch vụ mà hệ thống Portal cung cấp
Hệ thống Portal cần xây dựng cung cấp các nhóm dịch vụ như sau:
5.1. Các dịch vụ cơ bản:
Post bài định dạng HTML/Document, Danh sách liên kết, Upload/Download Files, Thao tác ảnh…
5.2. Các dịch vụ cộng đồng ảo (Virtual community hay Collaboration):
Cộng đồng ảo là “một địa điểm ảo” trên internet mà các cá nhân hay tổ chức có thể tập hợp để giúp đỡ, hợp tác với nhau mà ranh giới về vị trí địa lý không còn có ý nghĩa.
Cung cấp môi trường cộng tác (collaborative) thông qua việc quản lý và khai thác thống nhất toàn diện các dịch vụ cơ bản như: Forum, Mail, Calendar, Task Management, Report Systems, Conferences, Discussion Groups, News Groups, v.v...
5.3. Các dịch vụ cung cấp thông tin:
Thông báo, Bản tin...
5.4. Các dịch vụ tìm kiếm:
Hỗ trợ tìm kiếm nhanh và mạnh theo nhiều tiêu chí: tiêu đề, ngày, từ khóa, phân loại… và trong toàn bộ nội dung trang. Kết hợp với các trang tìm kiếm như Google, Yahoo, Vinaseek…
5.5. Các dịch vụ hiển thị tự động và đa kết nối:
Có thể soạn trước các bài và cài đặt ngày giờ cho hiển thị lên trang báo, sẽ tạo ra tính năng online về nội dung, mà không tốn nhiều công sức. Ngoài ra có thể tích hợp với các nguồn tin hay hệ thống dữ liệu khác.
5.6. Các dịch vụ trợ giúp người dùng:
Thông tin cá nhân, Lịch biểu…
5.7. Các dịch vụ tác nghiệp:
Quản lý nội dung, Hợp tác dự án, Quản lý bán hàng, quản lý nhân sự…
6. Lợi ích của hệ thống Portal
Hệ thống Portal hỗ trợ cộng đồng người dùng trực tuyến, các cán bộ, nhân viên, các đối tác và các nhà cung cấp... dưới nhiều hình thức kết hợp khác nhau. Cơ sở hạ tầng Portal giúp việc khởi tạo, tích hợp, quản lí và cá nhân hóa toàn diện các thông tin và ứng dụng cho mỗi người dùng riêng biệt phục vụ các nhu cầu và sở thích của một cộng đồng riêng biệt. Các lợi ích thực sự của hệ thống Portal này đem lại nhìn từ khía cạnh hiệu quả ứng dụng thực tế đó là:· Nâng cao hiệu quả làm việc cho các cá nhân và tổ chức, đối tác... nhờ truy cập bảo mật, tích hợp tới các thông tin và ứng dụng liên quan, cũng như truy cập tổng thể tới tất cả các cá nhân, thông tin, tổ chức và các nhà cung cấp từ bất kì đâu, bất kì khi nào.· Cải thiện các tiến trình hợp tác nhờ luồng thông tin tốt hơn giữa con người và các ứng dụng, và nhờ các môi trường cộng tác giúp giảm thời gian để chuyển đổi thông tin thô thành tri thức.· Giảm gánh nặng của việc triển khai và quản lí thông tin và các dịch vụ ứng dụng trong một tổ chức.· Bảo toàn đầu tư lâu dài. Có nền tảng công nghệ đảm bảo, do công nghệ Internet đã phát triển rất cao so với thời kỳ xuất hiện World Wide Web vào đầu những năm 90 của thế kỷ trước. Những công nghệ tạo nên thời đại Portal đều hỗ trợ tính mở và kế thừa rất mạnh, sao cho việc mở rộng các qui mô phục vụ bằng các phần mềm ứng dụng mới được “lắp ráp” vào Portal đang có, mà không phải hủy bỏ hoặc sửa chữa lớn như những web site trước đây vì vậy duy trì, quản lý, mở rộng, nâng cấp, tái sử dụng dễ dàng, tiết kiệm chi phí đầu tư để xây dựng lại hệ thống.· Cho phép các hãng thứ 3 tham gia vào việc cung cấp ứng dụng hệ thống, các dịch vụ trung gian... Khả năng này làm phong phú, đa dạng khả năng úng dụng và triển khai của hệ thống Portal.
7. Sự khác nhau cơ bản giữa Portal và Website
Portal (cổng giao dịch điện tử) là một bước tiến hóa của website truyền thống. Nó ra đời để giải quyết những vấn đề mà website truyền thống gặp phải. Xây dựng hệ thống Portal thay vì Website bởi vì hệ thống Portal cần xây dựng có những ưu điểm so với Website có cùng chức năng như sau: · Là "siêu web site“, gọi tắt là Portal, đối với người dùng vẫn chỉ là sử dụng trang web thông qua trình duyệt (tức là web browser), nhưng đằng sau đó là sự thay đổi thuật ngữ và quan niệm mới về triết lý phục vụ thay cho cách hiểu “tuyên truyền”
thông qua web site như trước đây.· Hệ thống Portal tạo ra các Website, các Website này có thể tùy biến trực quan (cả về giao diện và dữ liệu), giúp cho người phát triển Website, người quản trị website và người dùng Website có thể xây dựng, quản lý và sử dụng chúng một cách dễ dàng, thuận tiện.· Các mô đun trong Portal có tính độc lập cao, hoạt động không ảnh hưởng tới các mô đun khác.· Người dùng Portal có khả năng truy cập thông tin có được từ nhiều nguồn dữ liệu khác nhau.· Người phát triển dựa theo các chuẩn có sẵn để tích hợp thêm các mô đun tác nghiệp mới.
Xu hướng “tiến hóa” chung của web site theo hướng tiến đến portal:
Phía ngoài, cung cấp một cổng giao dịch thân thiện, đủ các chức năng cho người dùng, trong đó có chức năng cá nhân hóa.
Phía trong, là cung cấp một hạ tầng điện tử, nhằm tạo quyền chủ động trong việc cung cấp, tích hợp thông tin và liên kết với các hệ thống, các dịch vụ thông tin khác.
Cung cấp môi trường cộng tác (collaborative) thông qua việc quản lý và khai thác thống nhất toàn diện các dịch vụ cơ bản như: Forum, Mail, Calendar, Task Management, Report Systems, Conferences, Discussion Groups, News Groups, v.v... Các dịch vụ này là một phần của kho tài nguyên dịch vụ trên portal để người dùng lựa chọn. Việc quản lý người dùng được thực hiện một lần và thống nhất trên tất cả các ứng dụng dịch vụ của portal.
Portal Giải pháp phát triển Website công nghệ mới
Công nghệ portal sau hơn năm năm ra đời, đã liên tục phát triển và phổ biến rộng rãi. Với ưu điểm về kế thừa và chuẩn hoá các phân hệ chương trình, portal không dừng lại trong các dự án đồ sộ do các nhà khổng lồ về công nghệ như IBM, Oracle, Microsoft, Sun Microsystem cung cấp mà còn phổ biến trong cộng đồng các nhà phát triển ứng dụng mã nguồn mở và các công ty phần mềm địa phương. Ngày nay, portal còn có thể hiểu như là một thế hệ mới của công nghệ phát triển các ứng dụng Web.
Một số Portal nổi tiếng:
IBM Websphere Oracle Microsoft Share Point Sun One Open source Portals
Sun One Portal
Giới thiệu portal mã nguồn mở điển hình: . DNN Portal (Giải pháp phát triển Website công nghệ mới)
DNN portal là một giải pháp phát triển Website trên một portal frame work mã mở (DNN) do các chuyên gia Microsoft phát triển. DNN được đánh giá là sản phẩm viết bằng VB.NET hay nhất năm 2003 do tạp chí VB magazine bình chọn.
DNN Portal là một hệ thống quản lý nội dung mã nguồn mở viết bằng ngôn ngữ lập trình VB.NET trên nền tảng ASP.NET, hệ quản trị cơ sở dữ liệu có thể là MS SQL server hoặc Oracle. DNN được đánh giá là hệ thống quản trị nội dung mã nguồn mở .NET phát triển mạnh nhất hiện nay với số lượng thành viên đông đảo và phát triển rất nhanh trên khắp thế giới. Xây dựng cộng đồng ứng dụng và triển khai web và portal, phát triển và trao đổi các module phần mềm và skin giao diện DNN.
.Net là công nghệ phát triển Web do Microsoft xây dựng, và là công nghệ phát triển các ứng dụng Web thương mại phổ biến nhất hiện nay. Đây là công nghệ mũi nhọn của Microsoft và có nhiều ưu điểm nổi bật. Ngoài ra, việc phát triển Web theo công nghệ này giúp bạn tránh được những rủi ro về nhân lực trong phát triển tiếp theo và chỉnh sửa hệ thống vì lập trình viên .NET là rất dễ tìm.
Các tính năng cơ bản của giải pháp DNN portal:
1. Hệ thống quản lý nội dung trực quan:
DNN portal quản lý nội dung theo menu tình huống (hướng đối tượng), tức là trên mỗi module của hệ thống, sẽ có một menu tương ứng xuất hiện ngay tại một ICON bên trái Title của Module. Nhân viên quản trị sẽ dễ dàng tìm ra các chức năng điều khiển hay quản trị của module này một cách nhanh chóng tương ứng với quyền quản trị của anh ta. Trước đây, các hệ thống quản trị Website được cung cấp trên một giao diện riêng, khi hệ
thống mở rộng và đa chức năng công việc quản lý trở nên quá phức tạp khi menu quản trị chứa quá nhiều Items.
Khả năng quản lý nội dung trực quan
Các module được hiển thị và phân bố trên giao diện portal dễ dàng nhờ vào các từ khoá định trước trên các vùng khác nhau của giao diện. Bạn cũng có thể di chuyển một module từ khu vực này sang khu vực khác bằng một lệnh trên menu tình huống hoặc dùng cách Drag and Drop (Kéo thả).
Khi soạn thảo nội dung thông tin theo dạng Richtext, giải pháp này cũng cung cấp một công cụ WYSIWYG (What You See Is What You Get) đầy đủ, thuận tiện và hiện đại nhất: với khả năng chèn Flash file, Movie, … điều chỉnh các thuộc tính của đối tượng, làm sạch code…
Công cụ soạn thảo văn bản Richtext tiên tiến nhất trên Web
Hệ thống định hướng Website hoàn chỉnh: Menu được phát sinh động trên một cấu trúc Website với các trang Web tổ chức phân cấp. Có nhiều cách để xây dựng hệ thống định hướng cho các trang Web như dạng Menu truyền thống (hình 2) hoặc dạng cây, hỗ trợ hiển thị đường dẫn đến mỗi tràng….
Cấu trúc site (Site Map) cũng được quản lý một cách dễ dàng. Bạn có thể thêm một trang mới vào hệ thống đúng vào vị trí bạn muốn (tổ chức dạng cây) và cho phép hoặc không cho phép xuất hiện trên Menu.
Ngoài ra hệ thống này cũng cung cấp sẵn chức năng SUBMIT TO GOOGLE để cung cấp thông tin cho công cụ tìm kiếm, giúp việc quảng bá Website dễ dàng hơn. Bạn chỉ cần nhấp vào nút Submit to google ở cuối trang khi soạn thảo thông tin, thông tin trên trang đó sẽ được đưa vào cơ sở dữ liệu của Google.
2. Quản lý giao diện độc lập, linh hoạt:
Giao diện được phát triển riêng độc lập với chương trình, một nhà thiết kế giao diện cho Website có thể làm việc độc lập, chỉ cần một số tiêu chuẩn về giao diện phải tuân thủ, các nhà thiết kế không phải quan tâm nhiều đến vấn đề kỹ thuật của hệ thống, giao diện sau khi làm xong sẽ được tích hợp nhanh chóng vào hệ thống.
Hệ thống cũng cho phép quản lý nhiều giao diện, các trang Web khác nhau có thể chọn các giao diện khác nhau để thể hiện. Giao diện dễ dàng thay đổi trong khi vẫn đảm bảo hệ thống đang làm việc trực tuyến.
Ngoài ra DNN portal không có nhiều ràng buộc kỹ thuật vào giao diện, nên nhà thiết kế có thể tuỳ ý sáng tạo cho giao diện của mình.
Hệ thống quản lý giao diện của DNN portal là một trong những ưu điểm nổi bật so với các Portal khác. Do vậy DNN portal phù hợp cho các Website có yêu cầu giao diện cao và phục vụ công tác đối ngoại cho các doanh nghiệp, tổ chức…
3. Quản trị hệ thống với đầy đủ chức năng
Quản lý phân quyền là một trong những chức năng quan trọng của Portal. Hệ thống phân quyền của DNN Portal cung cấp rất chặt chẽ, cho phép nhà quản trị có thể tạo ra nhiều nhóm quyền (role) khác nhau và sau đó phân công cho người dùng (user).
Hệ thống phân quyền của các module có thể tích hợp và phân công thông qua các quyền đã tạo ra của hệ thống; do vậy việc phân quyền có thể thực hiện đến từng chức năng nhỏ của module.
Hệ thống cũng cung cấp sẳn công cụ quản lý thành viên.
Việc đăng nhập có thể tích hợp với hệ thống Authentication của hệ điều hành Windows nên khi triển khai trên Intranet có thể tăng mức độ bảo mật và đảm bảo việc đăng nhập một cửa.
DNN portal cung cấp công cụ quản lý File/ Folder qua giao diện Admin web với đầy đủ các chức năng như tạo thư mục, Upload, download, zip/Unzip cũng như việc phân quyền truy xuất vào hệ thống Website này.
Đối với việc quản lý các trang thông tin, hệ thống cũng cho phép khôi phục dữ liệu đã xoá (recylce bin). Việc này làm giảm rủi ro trong quản lý nội dung.
Ngoài ra trong việc quản trị hệ thống, giải pháp này còn cung cấp nhiều chức năng khác như: thống kê truy cập, quản lý nhật ký truy xuất, quản lý bộ nhớ đệm, thời khoá biểu vận hành của ứng dụng trên Portal, cơ chế cài đặt Module mới thuận tiện và khả năng quản lý nhiều Website thành viên.
3. An toàn và bảo mật:
Mức độ người dùng:
Hệ thống được quản lý phân quyền tập trung và chủ động tạo các quyền, nhóm quyền riêng cho từng phân hệ hoặc toàn bộ website, do đó những thành viên phụ trách phần nào sẽ chỉ có quyền truy xuất thông tin vào phần đó, hệ thống password sẽ dễ quản
lý, dễ kiểm soát. Password được lưu giữ trong Database đã được mã hoá theo chuẩn (SA1)
Mức độ dữ liệu:
Mã hoá dữ liệu (Password), Sử dụng SSL(Security Socket Layer) dành cho hệ thống thành viên, đăng nhập, hệ thống Backup với Back up Server
Mức độ công nghệ:
Lập trình 3 lớp, với lớp truy xuất dữ liệu riêng, lớp xử lý tác vụ, lớp xác nhận người dung.
Users có thể tích hợp với Active Directory của Windows và các quyền truy xuất theo NTFS, đảm bảo khả năng bảo mật cao nhất theo tiêu chuẩn của Windows.
Chương trình Portal có khả năng cài đặt trên nhiều server cùng lúc (Cả Database), có giải pháp dự phòng và cân bằng truyền tải.
Mức độ hệ thống: Do hạ tầng mạng quyết định, hệ thống có thể được thiết kế với lớp ngoài cùng được trang bị một IDS hoặc IPS (Intrusion Detection System) đảm nhiệm việc chống xâm nhập của hacker được tích hợp với fire wall.
4. Khả năng phát triển và mở rộng
Phát triển mở rộng với module, giao diện được xây dựng độc lập, theo chuẩn là một trong những thế mạnh của tất cả các Portal, và DNN Portal cũng chứa đựng khả năng này.
Ngày nay trên thế giới, công nghệ DNN cũng đã rất phổ biến, và nhiều nhà phát triển có thể cung cấp các phân hệ cho hệ thống này. Giải pháp DNN Portal do EQ cung cấp sẽ vẫn kế thừa được những phiên bản mới nhất của DNN, cũng như có thể tích hợp các module viết cùng chuẩn của các nhà cung cấp khác.
2. Chức năng được tích hợp
- Quản lý tài liệu, phân quyền truy xuất, download, upload (Documents)- Quản lý nhiều giao diện (Skins)- Quản lý thành viên (Users)- Thống kê người truy cập: Trên từng trang, từng web site, IP … (UserOnline)- Hệ thống quản trị nội dung, tin tức (CMS)- Chức năng tự động lọc lấy tin từ website khác (InfoFilter)- Hệ thống bán hàng trực tuyến (Shopping Cart)- Hệ thống quản lý và hiển thị hình ảnh, bộ sưu tập hình ảnh (Gallery)- Hệ thống hỗ trợ trực tuyến (Help Desk)- Quản lý, báo cáo dự án (Proeject Management)- Chức năng tạo thông báo, sự kiện theo thời gian (Events)
- Chức năng tạo các câu hỏi thăm dò (Poll/Vote/Servey)- Chức năng tạo lịch biểu (Calendar)- Chức năng quản lý banner quảng cáo (Banners)- Chức năng trao đổi thảo luận (Disscussion & Forum)- Quản lý các thông số hệ thống (Site Settings)- Quản lý các module chương trình (Module Definition)- Lưu giữ chi tiết SiteLogs, EventLogs- Phân quyền tập trung, chặt chẽ đến từng phần thông tin trên trang (Security Roles)- Có thể tích hợp module login bằng quyền Windows cho các hệ thống nội bộ- Quản lý tác vụ tự động (System Schedule)- Quản lý và chạy nhiều website trên 1 portal
và còn nhiều các chức năng khác đang được DNN phát triển
KIẾN TRÚC CỦA MODULE DOTNETNUKE
Phần I-1
Chúng ta sẽ tìm hiểu kiến trúc của một module DNN, cụ thể là ví dụ về module Survey (Thăm dò ý kiến) đi
kèm với bản DotNetNuke. Phần 1, chúng ta sẽ tìm cách thiết lập một dự án phát triển, và giao diện người
sử dụng cho module của chúng ta.
Chúng ta sẽ xem xét cách tạo module cho DotNetNuke, và đặc biệt là xem Mô hình Cung ứng
Dữ liệu (Data Provider Model) của DNN . Chúng ta sẽ không đi từng bước để phát triển các
module mà cung cấp cho bạn một tổng quan về kiến trúc và điểm khởi đầu để phát triển các
module riêng của bạn cho DNN.
Modules là gì?
Modules cung cấp cho người phát triển khả năng mở rộng thêm chức năng của DotNetNuke.
DotNetNuke cung cấp nền tảng có thể lắp thêm mà được mở rộng bởi phát triển modules. Một
hộp chứa của module được cung cấp bởi DotNetNuke để chứa module cần phát triển. Modules
có thể được phát triển bằng bất cứ ngôn ngữ .NET nào, thậm chí DNN được phát triển bằng
VB.NET, người phát triển C# vẫn tạo module và lắp vào lõi nền của DNN. Nền tảng có thể lắp
thêm này được hoàn chỉnh bởi việc tạo ra module riêng đã biên dịch, chúng thực hiện và sử
dụng những giao diện cụ thể đối với DNN. Một khi bạn biên dịch module thì chỉ cần tạo giao diện
người sử dụng (UI) dưới dạng tệp ascx mà cho phép người sử dụng tương tác với module của
bạn.
Hộp chứa của Module (Module Containers)
Module containers cung cấp nhiều tính năng cho người phát triển. Ngoài việc cho phép bạn giao
tiếp với nền tảng lõi DNN, module containers còn cung cấp:
<!--[if !supportLists]-->· Cơ chế bảo mật: Bạn có thể định nghĩa quyền xem và sửa cho các
module của bạn. DNN sẽ quản lý việc kiểm tra bảo mật cho module của bạn. Bạn không
cần phải viết riêng cơ chế bảo mật của mình mà dùng sự bảo mật dựa trên vai trò được
cung cấp bởi nền tảng.<!--[endif]-->
<!--[if !supportLists]-->· Xem và cảm nhận: Module container có thể được tùy biến với nhiều
cách xem khác nhau, hơn nữa module container và DNN cung cấp cho bạn khả năng đặt
module trong trang của DNN. Nó còn cho phép người sử dụng tùy biến hiển thị của
module, ví dụ như chế độ phóng to và thu nhỏ.<!--[endif]-->
<!--[if !supportLists]-->· Lưu giấu: Là một cơ chế tăng tốc, bạn có thể định nghĩa việc lưu
giấu ở mức container. Điều này cho phép các modules không cần phải cập nhật cho mỗi
yêu cầu để có được nội dung được ẩn, do đó đem lại sự cải thiện tốc độ.<!--[endif]-->
Thiết lập Môi trường Phát triển
Bây giờ chúng ta đã biết module thực sự là gì, hãy tiếp tục tạo ra dự án phát triển cho module. Có nhiều phương pháp để tạo module cho DNN, nhưng ở đây ta thiết lập một dự án riêng để tạo module và sau đó biên dịch nó thành module chạy (assemblies) trong thư mục bin của DNN. Quy trình sau cung cấp một phương pháp để thiết lập một dự án cho module của portal trong Visual Studio.NET
Tạo một dự án lớp, hãy sử dụng cấu trúc đặt tên logic. Ví dụ: CompanyName.ModuleName.
<!--[if !supportLists]-->1. Khi tạo thư mục dự án mới, tạo thư mục trong DotNetNuke Root\
DestopModules\ Thư mục<!--[endif]-->
<!--[if !supportLists]-->2. Xóa namespace từ thuộc tính của dự án. Kích chuột phải vào thuộc
tính của dự án, dưới mục general, xóa trong hộp root namespace.<!--[endif]-->
<!--[if !supportLists]-->3. Thêm một tham chiếu đến dự án DotNetNuke trong dự án module
mới của bạn.<!--[endif]-->
Đó là dành cho dự án chính của module. Bây giờ nếu bạn muốn thêm một bộ cung ứng dữ liệu
(data provider) vào dự án của bạn thì bạn thực hiện như thủ tục trên ngoại trừ tên của dự án của
bạn là CompanyName.ModuleName.SQLDataProvider (hoặc Access tùy thuộc vào cơ sở dữ liệu
nào bạn dùng). Thêm vào đó, bạn tạo tham chiếu đến dự án DotNetNuke, tạo tham chiếu đến dự
án module chính và thành phần chạy Microsoft.ApplicationBlock.Data. Điều này sẽ giúp trong
việc trừu tượng dữ liệu.
Khi dự án của bạn xong, trông nó sẽ giống như sau trong solution explorer của Visual
Studio.NET:
Bây giờ hãy tìm hiểu một chút về kiến trúc DNN. Hình sau được lấy từ tài liệu của DotNetNuke. Nó cung cấp hình ảnh về kiến trúc của DNN. Trước tiên với các điều khiển ascx sẽ cung cấp giao diện người sử dụng. Giao diện sau đó sẽ giao tiếp với Tầng Quy tắc Nghiệp vụ - Business Logic Layer (BLL), như trong sơ đồ, BLL được chứa trong lớp SurveyDB.vb, và cung cấp tất cả dữ liệu cho giao diện người sử dụng. Dưới BLL chúng ta có Bộ cung cấp Dữ liệu Trừu tượng – Abstract Data Provider, chúng ta sẽ tìm hiểu thêm ở những phần sau nhưng lớp này cung cấp một tầng trừu tượng cho ứng dụng của chúng ta. Bộ cung cấp này không dành riêng cho một cơ sở dữ liệu nào, mà chính lớp của bộ cung cấp dữ liệu sẽ cung cấp các phương thức đè lên lớp trừu tượng và tương tác với cơ sở dữ liệu cụ thể của chúng ta. Bộ cung cấp trừu tượng trong ví dụ này là lớp DataProvider.vb nằm bên trong dự án module thăm dò ý kiến chính. Dưới tầng trừu tượng chúng ta có Tầng Truy cập Dữ liệu – Data Access Layer, lớp này là dành riêng cho từng loại cơ sở dữ liệu và là duy nhất mà qua đó chúng ta muốn module của mình tương tác với cơ sở dữ liệu này. Lớp này là dự án SQLDataProvider như hình vẽ trên. Cuối cùng Microsoft.ApplicationBlocks.Data cung cấp các chức năng để tương tác với cơ sở dữ liệu cụ thể, và giải phóng người phát triển khỏi việc viết mã lệnh SQL Server cụ thể
Bây giờ chúng ta đã tìm hiểu kiến trúc và cách tạo dự án, bây giờ hãy bắt đầu viết mã lệnh. Các
mã lệnh trong bài viết này là ví dụ của module thăm dò ý kiến đi kèm với DotNetNuke, bạn hãy
thử sức mình xem.
Tạo Điều khiển của Bạn (Create Your Controls)
Trước tiên, bạn cần tạo một số điều khiển để người sử dụng. Trong ví dụ này chúng ta có điều khiển Survey.ascx, đây là điều khiển chính để đưa ra giao diện xem cho người sử dụng. Các điều khiển khác dành cho quản lý điều tra, đó là EditSurvey.ascx, EditSurveyOptions.ascx.
Phần I-2
Trong phần này chúng ta tiếp tục tìm hiểu về kiến trúc module của DNN module, cụ thể là
module Thăm dò ý kiến (Survey module). Trong phần đầu, chúng ta đã xem xét việc thiết lập
phát triển một dự án và giao diện người sử dụng cho module.
Điều khiển Xem (View Control)
Trong điều khiển xem, đây là điều khiển chính Survey.ascx control, mở tệp mã nguồn tương ứng
(the code behind file). Trong lớp này bạn chú ý đến đoạn sau: :D
Imports DotNetNuke
Namespace YourCompanyName.Survey
Public MustInherit Class Survey
Inherits PortalModuleControl
::
::
End Class
Bạn thấy rằng module không kế thừa lớp WebControls mà thay vào đó lại kế thừa
PortalModuleControl của DNN. PortalModuleControl, nằm trong lớp
/components/desktopcontrols.vb, cung cấp một số thuộc tính và phương thức rất quan trọng của
DNN, ví dụ:
IsEditable: Thuộc tính xác định liệu người sử dụng hiện thời có quyền sửa (edit) module hay
không.
UserId – mã định danh (id) của người sử dụng hiện thời
Help File path – đường dẫn đến tệp trợ giúp
Portal alias – bí danh hoặc tên của cổng thông tin (portal)
Portal ID – id của cổng hiện thời
Tab ID – id của tab hiện thời của trong DotNetNuke
Module ID – id của module hiện thời
Settings hash – bảng lưu tham số cấu hình cho riêng module
Trong ví dụ cụ thể này, chúng ta có một số tương tác cơ bản với một cơ sơ dữ liệu thông qua
BLL. Toàn bộ mã nguồn của module này đi cùng với DotNetNuke như một ví dụ. Hãy sử dụng nó
như một mẫu cho các dự án của bạn.
Điều khiển Sửa (Edit Control)
Giờ ta đã biết về điều khiển xem, đa số các module có ít nhất hai điều khiển ascx, một cho việc
xem dành cho người sử dụng, và các điều khiển khác dành để sửa đổi một số tính năng của một
module. Điều khiển sửa này cung cấp cho bạn cách tùy biến module cho từng thể hiện bên trong
DotNetNuke portal. Ví dụ, trong module thăm dò ý kiến bạn có thể muốn tạo ra nhiều thăm dò
cho portal của mình. Bạn có thể làm điều đó bằng cách truyền những giá trị riêng cho module
thông qua điều khiển sửa. DNN framwork đưa ra tính năng này bằng việc nhập vào ModuleID
cung cấp bởi PortalModuleControl, cũng như bảng tham số thiết lập (Setting hash), dùng như
thanh ghi để chứa thông tin riêng của module.
Hãy xem cách lưu và lấy các giá trị thiết lập vào tham số thiết lập:
Private Sub cmdUpdate_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles cmdUpdate.Click
Dim objModules As New DotNetNuke.ModuleController
objModules.UpdateModuleSetting(ModuleId, "surveyclosingdate", txtClosingDate.Text)
objModules.UpdateModuleSetting(ModuleId, "surveygraphwidth", txtGraphWidth.Text)
' Redirect back to the portal home page
Response.Redirect(NavigateURL())
End Sub
Bạn chú ý Click handler ở trên, chúng ta viết một số giá trị vào tham số thiết lập cho module cụ
thể. Chúng ta xác định ModuleID, được cung cấp bởi PortalModuleControl, và sau đó lưu giá trị
trường text vào trong tham số. Điều đó thật dễ dàng chỉ với vài dòng lệnh. Lấy thông tin từ bảng
tham số cũng rất đơn giản:
txtClosingDate.Text = CType(Settings("surveyclosingdate"), String)
txtGraphWidth.Text = CType(Settings("surveygraphwidth"), String)
Ở trên, chúng ta đã thực hiện việc lưu và lấy dữ liệu từ bảng tham số và đưa lên các điều khiển
text.
Khai báo cho DotNetNuke Biết Về các Module của Bạn
Nhiều bạn có thể quen thuộc với các tệp cài đặt Private Assembly, bạn chỉ cần upload một tệp
zip vào DNN và tất cả được cài đặt tự động. Khi bạn đang phát triển module, bạn thường phải
làm việc này bằng tay, và để DNN biết về vị trí các điều khiển ascx của bạn. Các cấu phần đã
dịch (assemblies) của bạn được biên dịch và lưu vào thư mục bin của DNN như vậy DNN có thể
truy cập vào chúng khi cần, nhưng bạn vẫn cần khai báo cho DNN biết về module mới của bạn.
Bạn có thể định nghĩa bằng tay module của bạn như sau:
<!--[if !supportLists]-->· <!--[endif]-->Dưới menu Host Setting, chuyển đến Module Definitions.
<!--[if !supportLists]-->· <!--[endif]-->Trong Module Definitions, chọn Add New Definition từ menu của
module phía góc trên bên trái.
<!--[if !supportLists]-->· <!--[endif]-->Bạn sẽ thấy màn hình Edit Module Difinitions.
<!--[if !supportLists]-->· <!--[endif]-->Từ đó bạn thêm định nghĩa mới.
<!--[if !supportLists]-->· <!--[endif]-->Khi định nghĩa được tạo ra, thì thêm các điều khiển dành cho
người sử dụng vào module. Đối với module thăm dò ý kiến bạn sẽ cần thêm như sau:
<!--[if !supportLists]-->o <!--[endif]-->Survey.ascx – Kiểu là View
<!--[if !supportLists]-->o <!--[endif]-->EditSurvey.ascx – Kiểu là Edit, Khóa là Edit.
<!--[if !supportLists]-->o <!--[endif]-->EditSurveyOptions.ascx – Kiểu là Edit, Khóa là Options.
Tạo Cấu trúc Cơ sở dữ liệu
Bây giờ DNN biết về module Survey, bạn muốn tạo cấu trúc cơ sở dữ liệu. Nếu đây là cài đặt
module đã dịch (PA) bạn chỉ cần cài đặt nó, nhưng để an toàn khi dự án phát triển thì nên chạy thủ
công SQL script. Có thể dùng Query Analyzer từ meny SQL Server tool. Trước tiên, bạn cần mở
script nằm trong thư mục SQLDataProvider dành cho module Survey. Sau đó, xóa các dẫn
hướng (directive) {databaseowner} và {objectqualifier} từ script. Các dẫn hướng này dành cho
DNN khi cài đặt module dưới dạng tệp module đã dịch. Khi đã bỏ các dẫn hướng, chạy script để
sinh ra cơ sở dữ liệu.
Tham chiếu đến các Khóa của Module
Trong chú ý cuối cùng của phần tạo module, chúng ta sẽ tìm hiểu về tham chiếu tới các khóa của
điều khiển của bạn bên trong mã nguồn. Mở ví dụ thăm dò ý kiến, và mở rộng phương thức
initialize trong phần mã nguồn của điều khiển survey.ascx. Bạn sẽ chú ý đến vị trí mà module tạo
ra tùy chọn của menu cho từng điều khiển:
' PortalModuleControl base class settings for this module
MyBase.HelpFile = "help.txt" ' a local document stored in the same folder as the user control
MyBase.HelpURL = "http://www.dotnetnuke.com" ' a URL for support on the module
' action menu items
MyBase.Actions.Add(GetNextActionID, "View Options", "", URL:=EditURL(, , "Options"), _
secure:=SecurityAccessLevel.Edit, Visible:=True)
MyBase.Actions.Add(GetNextActionID, "Add Survey", "", URL:=EditURL(), _
secure:=SecurityAccessLevel.Edit, Visible:=True)
Ở đây, chúng ta đã tạo ra các lựa chọn của thực đơn, và sau đó tham chiếu tới chúng bằng các
khóa của chúng. Ví dụ, hãy xem phương thức MyBase.Action.Add, chúng ta thêm các lựa chọn
của thực đơn và tham chiếu tới chúng bằng Key trong giá trị cuối cùng được gửi đến EditURL.
Bạn có thể thấy “Options” được truyền. Đây là khóa chúng ta đã định nghĩa trước đó trong phần
định nghĩa module. Chúng ta cũng đồng thời xác định thông tin bảo mật cho thực đơn.
Hy vọng bài viết này cung cấp cho bạn thông tin tổng quan về kiến trúc của module thăm dò ý kiến đi kèm với DNN. Hãy dùng ví dụ này để xây dựng module riêng của bạn. Phần tiếp theo chúng ta sẽ thảo luận về mô hình bộ cung ứng dữ liệu (data provider model) của DotNetNuke và bạn sẽ phát triển trên nó như thế nào.
Phần II-1
Trong phần hai này, chúng ta sẽ tìm hiểu Tầng Quy tắc Nghiệp vụ (Business Logic Layer), và
Tầng trừu tượng Dữ liệu (Data Abstraction Layer) của Kiến trúc module của DotNetNuke.
Trong phần trước, chúng ta đã bàn đến việc cài đặt dự án cho module của bạn như
thế nào, chúng ta cũng đã bắt đầu phát triển một số phần giao diện người sử dụng
cho module của mình. Trong bài viết này, chúng ta sẽ tìm hiểu sự khác biệt của kiến
trúc DNN đối với đa số các ứng dụng .NET khác, đặc biệt là mô hình cung ứng dữ liệu
(data provider model). Mô hình cung ứng là một đề tài nổi bật trong phiên bản sắp tới
của Visual Studio 2005, và nó làm cho DNN mềm dẻo để kết nối được với bất kỳ cơ sở
dữ liệu nào bên dưới. Ở đây, chúng ta sẽ bàn đến Tầng Quy tắc Nghiệp vụ và Tầng
trừu tượng Dữ liệu của kiến trúc DNN, trong phần III chúng ta sẽ kết thúc bằng việc
xem xét tổng quan về lớp Cung ứng Dữ liệu.
BLL, và DAL
Chúng nghĩa là gì?
<!--[if !supportLists]-->· <!--[endif]-->Business Logic Layer (BLL) – chứa tất cả quy tắc của nghiệp
vụ của bạn. Ví dụ, nếu bạn ghi nợ một tài khoản và cũng ghi có ở một tài khoản khác, điều này
phải thể hiện ở BLL.
<!--[if !supportLists]-->· <!--[endif]-->Data Abstraction Layer – Đây là một tầng trong ứng dụng
của bạn, nó kết nối tới bộ cung ứng dữ liệu. Nó chứa các phương thức có thể ghi đè mà bộ cung
ứng của bạn sẽ ghi đè lên đối với từng loại cơ sở dữ liệu cụ thể. BLL của ứng dụng của bạn sẽ giao
tiếp với DAL thông qua một lớp hỗ trợ đối tượng nghiệp vụ module (CBO).
Lớp hỗ trợ đối tượng nghiệp vụ module cơ bản là một lớp mà sinh ra một tập hợp đối
tượng hoặc đối tượng mà bạn đã tạo ra bên trong module của bạn. Thông thường
những đối tượng này trực tiếp liên quan đến các thủ tục lưu (stored procedures) hoặc
truy vấn từ cơ sở dữ liệu.
Phản ánh Trừu tượng (Reflection versus Abstraction)
Có rất nhiều thay đổi rõ ràng trong DNN , trong DNN 1.x chúng ta lấy dữ liệu từ cơ sở dữ liệu bằng
reflection. Vấn đề chính xảy ra đối với kiến trúc trước của DNN là thiếu sự xác định rõ ràng giữa các tầng
khác nhau, vd. Tầng dữ liệu, quy tắc nghiệp vụ, và tầng người sử dụng. Bây giờ, với mô hình cung ứng
chúng ta có sự tách biệt rõ ràng giữa các tầng.
Một bước tiến lớn khác trong kiến trúc DNN là tốc độ. Nhờ vào các kỹ thuật trừu tượng và lưu giấu
(abstraction and caching techniques), đã có sự tăng tốc tuyệt vời như thể hiện ở bảng dưới đây:
DotNetNuke 2.0 ( DAL enhancement )
Total number of requests: 93,254
Total number of connections: 93,253
Average requests per second: 310.85
Average time to first byte (msecs): 2.37
Average time to last byte (msecs): 2.46
Average time to last byte per iteration (msecs): 29.58
Number of unique requests made in test: 12
Number of unique response codes: 1
DotNetNuke 1.0.10 ( SqlCommandGenerator )
Total number of requests: 42,350
Total number of connections: 42,350
Average requests per second: 141.17
Average time to first byte (msecs): 6.02
Average time to last byte (msecs): 6.15
Average time to last byte per iteration (msecs): 116.94
Number of unique requests made in test: 17
Number of unique response codes: 2
Bạn thấy thời gian đáp ứng đã được cải tiến tuyệt vời!
Tầng Quy tắc Nghiệp vụ (Business Logic Layer)
Bây giờ ta tìm hiểu thêm về các lớp bạn cần tạo để tương tác với cơ sở dữ liệu. Trong phần I, chúng ta đã
bàn về các phần giao diện người sử dụng của module thăm dò ý kiến, bây giờ ta sẽ nói đến phần BLL.
Trong ví dụ thăm dò ý kiến, lớp BLL là SurveyDB.vb, trong các module của bạn, bạn nên theo cùng qui ước
đặt tên, vd: ModuleNameDB. Bên trong tệp này có ít nhất hai lớp cho module của bạn, một lớp ModuleInfo
và một lớp ModuleController, chẳng hạn SurveyInfor và SurveyController. Đây là mô tả về hai lớp này:
ModuleInfo: Đặt và lấy các thuộc tính công bố của các đối tượng được sinh bởi các lớp điều khiển.
ModuleController: Được dùng để lưu giữ các đối tượng, chủ yếu sử dụng lớp trợ giúp đối tượng nghiệp vụ
(custom business objects helper class) để đổ dữ liệu từ bộ cung cấp vào tập hợp các đối tượng.
Hãy xem lớp SurveyInfo và tìm hiểu điều gì đang diễn ra bên trong:
Imports System
Imports System.Data
Imports DotNetNuke
Namespace YourCompanyName.Survey
Public Class SurveyInfo
' local property declarations
Private _SurveyId As Integer
::
' initialization
Public Sub New()
End Sub
' public properties
Public Property SurveyId() As Integer
Get
Return _SurveyId
End Get
Set(ByVal Value As Integer)
_SurveyId = Value
End Set
End Property
::
End Class
Thông thường một lớp đơn giản trình bày các thuộc tính cho lớp điều khiển. Hãy xem lớp điều khiển:
Public Class SurveyController
Public Function GetSurveys(ByVal ModuleId As Integer) As ArrayList
Return CBO.FillCollection(DataProvider.Instance().GetSurveys(ModuleId), _
GetType(SurveyInfo))
End Function
Public Function GetSurvey(ByVal SurveyID As Integer, _
ByVal ModuleId As Integer) As SurveyInfo
Return CType(CBO.FillObject(DataProvider.Instance().GetSurvey(SurveyID, ModuleId), _
GetType(SurveyInfo)), SurveyInfo)
End Function
Public Sub DeleteSurvey(ByVal SurveyID As Integer)
DataProvider.Instance().DeleteSurvey(SurveyID)
End Sub
Public Function AddSurvey(ByVal objSurvey As SurveyInfo) As Integer
Return CType(DataProvider.Instance().AddSurvey(objSurvey.ModuleId, objSurvey.Question, _
objSurvey.ViewOrder, objSurvey.OptionType, objSurvey.CreatedByUser), Integer)
End Function
Public Sub UpdateSurvey(ByVal objSurvey As SurveyInfo)
DataProvider.Instance().UpdateSurvey(objSurvey.SurveyId, objSurvey.Question, _
objSurvey.ViewOrder, objSurvey.OptionType, objSurvey.CreatedByUser)
End Sub
End Class
Vậy lớp điều khiển là gì? Nếu bạn xem mã lệnh trên bạn sẽ thấy các phương thức, GetSurveys,
GetSurvey, DeletetSurvey, AddSurvey, và UpdateSurvey. Trong đa số trường hợp, các phương
thức này tương ứng trực tiếp với một thủ tục lưu (stored procedure) bên trong cơ sở dữ liệu của
bạn. Ví dụ, có thủ tục lưu GetSurveys trong cơ sở dữ liệu nhận ModuleID như tham số, và trả về
một bản ghi. Bây giờ trong lớp điều khiển bạn sẽ làm tương tự như vậy, trong phương thức
GetSurveys bạn nhận ModuleID như đầu vào (sẽ được truyền cho lớp cung ứng để thực thi cơ
sở dữ liệu). Sau đó kết quả trả về sẽ có kiểu SurveyInfo. Hãy nhớ rằng trong SurveyInfo chúng ta
đã định nghĩa các thuộc tính cho lớp của chúng ta, các thuộc tính này thông thường tương ứng
với các trường chứa trong cơ sở dữ liệu. Bây giờ chúng ta sẽ tạo một đối tượng tập hợp cho
module để làm việc thay cho một record set hay data reader. Nó được kết hợp với các lớp cung
ứng dữ liệu mang đến sự trừu tượng cho các loại cơ sở dữ liệu khác nhau.
Xem xét lớp này kỹ hơn, bạn sẽ thấy là phương thức GetSurveys trước tiên gọi một phương
thức CBO, nó sẽ truyền một thể hiện (đối tượng) của lớp trừu tượng dữ liệu. CBO hoặc lớp đối
tượng nghiệp vụ lấy dữ liệu từ cơ sở dữ liệu thông qua lớp trừu tượng dữ liệu, và đổ dữ liệu vào
tập hợp các đối tượng như là kết quả trả về cho BLL. Vậy ý tưởng chính ở đây là chúng ta không
làm việc trực tiếp với dữ liệu từ lệnh gọi đến cơ sở dữ liệu, các module xử lý tập hợp các đối
tượng có chứa các thuộc tính mà chúng ta đã định nghĩa trong lớp SurveyInfo.
Một điều khác cần chú ý là khi bạn thực hiện các thao tác cập nhật, thêm, và xóa không cần bọc
lệnh gọi bên trong phương thức CBO, bởi vì trong đa số các trường hợp không có giá trị trả về từ
cơ sở dữ liệu.
Phần II-2
Trong phần này chúng ta sẽ tìm hiểu Business Logic Layer và Data Abstraction Layer của Kiến
trúc module của DotNetNuke.
Trừu tượng Cơ sở dữ liệu (Database Abstraction)
Bây giờ chúng ta bàn đến BLL, hãy tìm hiểu về trừu tượng thêm một chút, chúng ta biết rằng các phương
thức trong BLL tương ứng với các thủ tục lưu (trong trường hợp của SQL), nhưng thực sự thì các lệnh gọi
này được trừu tượng như thế nào? Sự trừu tượng này được cung cấp bởi lớp DataProvider.vb của chúng ta
trong ví dụ Survey. Bạn có thể xem mã lệnh ở dưới, lớp này chứa các phương thức có thể đè (overridable
methods) mà lớp SQLDataProvider thực sự sẽ cung cấp. Với việc trừu tượng hóa các phương thức này trong
lớp trừu tượng DataProvider.vb, tất cả những điều chúng ta cần làm là thêm một cấu phần đã dịch
(assembly) mới cho cơ sở dữ liệu mà chúng ta sử dụng bên dưới cho DNN, không cần phải biên dịch lại
hoặc thay đổi module. Lớp trừu tượng này trở thành một phần của dự án module của bạn.
Imports System
Imports System.Web.Caching
Imports System.Reflection
Namespace YourCompanyName.Survey
Public MustInherit Class DataProvider
' provider constants - eliminates need for Reflection later
Private Const [ProviderType] As String = "data" ' maps to in web.config
Private Const [NameSpace] As String = "YourCompanyName.Survey" ' project namespace
Private Const [AssemblyName] As String = "YourCompanyName.Survey" ' project assemblyname
Public Shared Shadows Function Instance() As DataProvider
Dim strCacheKey As String = [NameSpace] & "." & [ProviderType] & "provider"
' Use the cache because the reflection used later is expensive
Dim objConstructor As ConstructorInfo = _
CType(DotNetNuke.DataCache.GetCache(strCacheKey), ConstructorInfo)
If objConstructor Is Nothing Then
' Get the provider configuration based on the type
Dim objProviderConfiguration As DotNetNuke.ProviderConfiguration = _
DotNetNuke.ProviderConfiguration.GetProviderConfiguration([ProviderType])
' The assembly should be in \bin or GAC,
' so we simply need to get an instance of the type
Try
' Override the typename if a ProviderName is specified
' ( this allows the application to load a different
' DataProvider assembly for custom modules )
Dim strTypeName As String = [NameSpace] & "." & _
objProviderConfiguration.DefaultProvider & _
", " & [AssemblyName] & "." & objProviderConfiguration.DefaultProvider
' Use reflection to store the constructor of the class that implements DataProvider
Dim t As Type = Type.GetType(strTypeName, True)
objConstructor = t.GetConstructor(System.Type.EmptyTypes)
' Insert the type into the cache
DotNetNuke.DataCache.SetCache(strCacheKey, objConstructor)
Catch e As Exception
' Could not load the provider - this is likely due to binary compatibility issues
End Try
End If
Return CType(objConstructor.Invoke(Nothing), DataProvider)
End Function
' all core methods defined below
Public MustOverride Function GetSurveys(ByVal ModuleId As Integer) As _
IDataReader
Public MustOverride Function GetSurvey(ByVal SurveyID As Integer, _
ByVal ModuleId As Integer) As IDataReader
Public MustOverride Function AddSurvey(ByVal ModuleId As Integer, ByVal Question As _
String, ByVal ViewOrder As Integer, ByVal OptionType As String, _
ByVal UserName As String) As Integer
Public MustOverride Sub UpdateSurvey(ByVal SurveyId As Integer, ByVal Question As _
String, ByVal ViewOrder As Integer, ByVal OptionType As String, ByVal UserName As String)
Public MustOverride Sub DeleteSurvey(ByVal SurveyID As Integer)
Public MustOverride Function GetSurveyOptions(ByVal SurveyId As Integer) As _
IDataReader
Public MustOverride Function AddSurveyOption(ByVal SurveyId As Integer, _
ByVal OptionName As String, ByVal ViewOrder As Integer) As Integer
Public MustOverride Sub UpdateSurveyOption(ByVal SurveyOptionId As Integer, _
ByVal OptionName As String, ByVal ViewOrder As Integer)
Public MustOverride Sub DeleteSurveyOption(ByVal SurveyOptionID As Integer)
Public MustOverride Sub AddSurveyResult(ByVal SurveyOptionId As Integer)
End Class
End Namespace
Hãy xem mã lệnh trong lớp trừu tượng làm gì.
<!--[if !supportLists]-->- <!--[endif]-->Trừu tượng các lệnh gọi đến cơ sở dữ liệu dùng các phương
thức có thể đè.
<!--[if !supportLists]-->- <!--[endif]-->Chứa một phương thức instance() để xác định bộ cung cấp
dữ liệu để dùng cho module của chúng ta (sẽ bàn đến ở phần sau).
<!--[if !supportLists]-->- <!--[endif]-->Chứa tất cả các phương thức truy cập dữ liệu cho các modulé
của bạn mà sau đó được chuyên tới bộ cung ứng dữ liệu để tương tác trực tiếp với một cơ sở dữ
liệu cụ thể.
Nhìn vào phương thức instance của lớp, bạn sẽ thấy nó kiểm tra xem bộ cung ứng của cơ sở dữ liệu nào
chúng ta sẽ sử dụng cho module, nó sẽ nạp đúng bộ cung ứng và bộ cung ứng của chúng ta sẽ cho phép
tương tác với cơ sở dữ liệu trực tiếp cho module. Cách mà bộ cung cấp được xác định trong DotNetNuke là
sửa đổi tệp Web.config ở phần khóa DotNetNuke. Mặc định cài đặt của DotNetNuke, có hai bộ cung ứng
sẵn có là Access và SQL Server, và ngầm định Access được xác định, nhưng có thể thay đổi bằng cách trỏ
defaultProvider đến SQLDataProvider. Hãy xem Web.config với sửa đổi SQL này.
<dotnetnuke>
<data defaultProvider="SqlDataProvider" >
<providers>
<clear/>
<add name = "SqlDataProvider"
type = "DotNetNuke.Data.SqlDataProvider, DotNetNuke.SqlDataProvider"
connectionString = "Server=localhost;Database=Demo;uid=sa;pwd=;"
providerPath = "~\Providers\DataProviders\SqlDataProvider\"
objectQualifier = ""
databaseOwner = "dbo"
/>
<add name = "AccessDataProvider"
type = "DotNetNuke.Data.AccessDataProvider, DotNetNuke.AccessDataProvider"
connectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
providerPath = "~\Providers\DataProviders\AccessDataProvider\"
objectQualifier = "DotNetNuke"
databaseFilename = "DotNetNuke.mdb.resources"
/>
</providers>
</data>
</dotnetnuke>
Trong phần ba chúng ta sẽ bàn đến việc phát triển trên SQLDataProvider. Phần cuối này chúng tôi sẽ giải thích cách bạn tạo một gói cài đặt cấu phần riêng để chuyển giao như thế nào
Phần III-1
Trong phần cuối này, chúng ta sẽ tìm hiểu kiến trúc của lớp cung ứng của cơ sở dữ liệu, và cuối
cùng là tạo ra gói chuyển giao và cài đặt module trong DNN.
Lớp Cung ứng Cơ sở dữ liệu (The Database Provider Class)
Dự án lớp cung ứng của cơ sở dữ liệu là cấu phần cho phép trực tiếp tương tác với một cơ sở dữ liệu cụ thể.
Cho tới giờ, chúng ta vẫn ở bên trong cấu phần module và toàn bộ tương tác cơ sở dữ liệu được trừu tượng
với cơ sở dữ liệu bằng việc sử dụng Lớp Trừu tượng Dữ liệu (Data Abstraction Layer) được cung cấp bởi lớp
DataProvider.vb của module. Bây giờ chúng ta sẽ xem một lớp cụ thể tương tác với cơ sở dữ liệu, trong ví
dụ này đó là lớp SQLDataProvider.vb của dự án SQLDataProvider của module thăm dò ý kiến.
Hãy xem lại xem bạn đã thiết lập dự án cho SQLDataProvider như thế nào:
<!--[if !supportLists]-->- <!--[endif]-->Tạo dự án lớp mới.
<!--[if !supportLists]-->- <!--[endif]-->Đổi các thuộc tính của dự án như sau:
<!--[if !supportLists]-->o <!--[endif]-->Đổi tên thành
Company.ModuleName.SQLDataProvider
<!--[if !supportLists]-->o <!--[endif]-->Xóa namespace.
<!--[if !supportLists]-->o <!--[endif]-->Thêm các tham chiếu:
<!--[if !supportLists]-->§ <!--[endif]-->DotNetNuke (dự án)
<!--[if !supportLists]-->§ <!--[endif]-->Company.ModuleName (dự án)
<!--[if !supportLists]-->§ <!--[endif]-->Microsoft.ApplicationBlocks.Data
<!--[if !supportLists]-->o <!--[endif]-->Đổi đường dẫn biên dịch thành thư mục bin của
DotNetNuke của bạn.
Bạn có thể xem ảnh của giải pháp ở phần I.
Lớp Cung ứng Dữ liệu (The Data Provider Class)
Hãy xem một số điểm quan trọng của bộ cung ứng dữ liệu SQL:
<!--[if !supportLists]-->- <!--[endif]-->Cơ sở dữ liệu cụ thể, đối với mỗi cơ sở dữ liệu bạn muốn sử
dụng, bạn sẽ cần một bộ cung ứng dữ liệu cho module của mình.
<!--[if !supportLists]-->- <!--[endif]-->Thực hiện lời gọi sử dụng IdataReader để lấy thông tin từ cơ
sở dữ liệu.
<!--[if !supportLists]-->- <!--[endif]-->Đè các phương thức đã khai báo trong tầng trừu tượng của
bộ cung ứng dữ liệu.
<!--[if !supportLists]-->- <!--[endif]-->Có thể sửa đổi thoải mái dựa vào loại cơ sở dữ liệu cụ thể.
Bây giờ chúng ta đã biết tương tác cơ sở dữ liệu thực sự làm gì, hãy xem mã lệnh của ví dụ module Survey:
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.ApplicationBlocks.Data
Imports DotNetNuke
Namespace YourCompanyName.Survey
Public Class SqlDataProvider
Inherits DataProvider
Private Const ProviderType As String = "data"
Private _providerConfiguration As ProviderConfiguration = _
ProviderConfiguration.GetProviderConfiguration(ProviderType)
Private _connectionString As String
Private _providerPath As String
Private _objectQualifier As String
Private _databaseOwner As String
Public Sub New()
' Read the configuration specific information for this provider
Dim objProvider As Provider = _
CType(_providerConfiguration.Providers(_providerConfiguration.DefaultProvider), _
Provider)
' Read the attributes for this provider
_connectionString = objProvider.Attributes("connectionString")
_providerPath = objProvider.Attributes("providerPath")
_objectQualifier = objProvider.Attributes("objectQualifier")
If _objectQualifier <> "" And _objectQualifier.EndsWith("_") = False Then
_objectQualifier += "_"
End If
_databaseOwner = objProvider.Attributes("databaseOwner")
If _databaseOwner <> "" And _databaseOwner.EndsWith(".") = False Then
_databaseOwner += "."
End If
End Sub
Public ReadOnly Property ConnectionString() As String
Get
Return _connectionString
End Get
End Property
Public ReadOnly Property ProviderPath() As String
Get
Return _providerPath
End Get
End Property
Public ReadOnly Property ObjectQualifier() As String
Get
Return _objectQualifier
End Get
End Property
Public ReadOnly Property DatabaseOwner() As String
Get
Return _databaseOwner
End Get
End Property
' general
Private Function GetNull(ByVal Field As Object) As Object
Return Null.GetNull(Field, DBNull.Value)
End Function
Public Overrides Function GetSurveys(ByVal ModuleId As Integer) As IDataReader
Return CType(SqlHelper.ExecuteReader(ConnectionString, _
DatabaseOwner & ObjectQualifier & "GetSurveys", ModuleId), IDataReader)
End Function
Public Overrides Function GetSurvey(ByVal SurveyID As Integer, _
ByVal ModuleId As Integer) As IDataReader
Return CType(SqlHelper.ExecuteReader(ConnectionString, _
DatabaseOwner & ObjectQualifier & "GetSurvey", SurveyID, ModuleId), IDataReader)
End Function
::
::
::
End Class
Bạn có thể thấy ở mã nguồn trên đây, chúng ta có một số thuộc tính dành cho chuỗi kết nối cơ
sở dữ liệu được định nghĩa trong web.config, đường dẫn của bộ cung ứng, cũng được xác định
trong web.config; hãy nhớ bài trước chúng ta đã xác định vị trí bộ cung ứng dữ liệu ở đâu? Đó là
giá trị của provider path (_providerPath) này trong lớp của chúng ta. Cuối cùng, chúng ta có hai
chuỗi nữa, database owner (_databaseOwner), và object qualifier (_objectQualifier).
Database owner cho phép chúng ta xác định giá trị và truyền cho các phương thức của cơ sở dữ
liệu, điều này giải quyết một số vấn đề trong quá khứ gặp phải là viết mã lệnh cứng dbo hoặc giá
trị khác cho tài khoản của databse owner. Bằng cách này một ISP có thể xác định các tài khoản
khác nhau cho các cơ sở dữ liệu khác nhau và không phải tính đến bảo mật và quyền hạn.
Object qualifier là tiền tố (prefix name) cho cấu trúc bảng, hiện thời để trống.
Dưới các thuộc tính, bạn có các phương thức tương ứng với các thủ tục lưu nằm trong cơ sở dữ
liệu DNN. Bạn cũng có SQL ở đây hoặc các truy vấn có tham số, bất kỳ điều gì cần để kết nối
trực tiếp đến cơ sở dữ liệu. Khi hàm của bạn trả về kiểu IDataReader để được quản lý ở tầng
trừu tượng, nó sẽ được đẩy vào tập hợp đối tượng nhờ lớp trợ giúp đối tượng nghiệp vụ tùy biến
(CBO.vb) được cung cấp bởi nền tảng DNN (nhớ lại bài viết trước).
Một khi tất cả các tầng của bạn được hoàn thành, hãy biên dịch chúng thành phiên bản (release)
và chuẩn bị để đóng gói (distribution).
Đóng gói Module của Bạn
Chúng ta đã tìm hiểu mọi tầng của kiến trúc module DotNetNuke, bây giờ hãy chuẩn bị để
chuyển giao module. Trong các bước sau chúng ta sẽ tạo một gói cấu phần riêng biệt (private
assembly package) từ module thăm dò ý kiến sao cho nó có thể được chuyển giao dễ dàng đến
các cổng DNN khác.
Tạo Cơ sở dữ liệu để Đóng gói
Bây giờ bạn đã tạo được dự án của bộ cung ứng, chúng ta cần tạo ra mã lệnh SQL (SQL script)
để sinh ra cấu trúc cho cơ sở dữ liệu của chúng ta. Bạn còn nhớ các chuỗi database owner và
object qualifier được xác định trong lớp cung ứng dữ liệu? Chúng ta sẽ cần xác định các biến
này trong mã lệnh SQL để triển khai. DotNetNuke sẽ tìm để kiểm tra giá trị tìm được. Tạo mã
lệnh này chỉ cần xử lý thêm một chút sau khi bạn dùng SQL Query Analyzer và kết xuất (export)
mã lệnh tạo ra từ cơ sở dữ liệu. Đúng thế, trước hết bạn sinh mã lệnh SQL thông qua Query
Analyzer hoặc Enterprise Manager, nhưng chúng ta sẽ cần thêm một vài thông tin bổ sung vào
mã lệnh này để DNN tạo đúng cấu trúc cơ sở dữ liệu.
Sau khi bạn sinh mã lệnh SQL, bạn sẽ cần thêm các tiền tố sau vào trước tên bảng và các tham
chiếu thủ tục lưu trong mã lệnh mới được tạo.
{databaseOwner}{objectQualifier}
Các tiền tố này sau này sẽ được thay bằng giá trị được định nghĩa trong web.config tại thời điểm
sinh cơ sở dữ liệu trong khi cài đặt module. Do đó, ví dụ sau của mã lệnh SQL để sinh một bảng:
if not exists (select * from dbo.sysobjects where
id = object_id(N'{databaseOwner}{objectQualifier}[SurveyOptions]')
and OBJECTPROPERTY(id, N'IsTable') = 1)
CREATE TABLE {databaseOwner}{objectQualifier}SurveyOptions (
[SurveyOptionID] [int] IDENTITY (1, 1) NOT NULL ,
[SurveyID] [int] NOT NULL ,
[ViewOrder] [int] NOT NULL ,
[OptionName] [nvarchar] (500) NOT NULL ,
[Votes] [int] NOT NULL
) ON [PRIMARY]
GO
Bạn có thể thấy chúng tôi hiện sáng tiền tố sau đó trong mã lệnh sinh thủ tục lưu bạn sẽ thấy chúng sẽ
được thêm vào trong bất kỳ nào tham chiếu đến bảng:
create procedure {databaseOwner}{objectQualifier}UpdateSurveyOption
@SurveyOptionID int,
@OptionName nvarchar(500),
@ViewOrder int
as
update {objectQualifier}SurveyOptions
set OptionName = @OptionName,
ViewOrder = @ViewOrder
where SurveyOptionID = @SurveyOptionID
GO
Khi mã lệnh SQL của bạn được hoàn thành, hãy lưu nó và đặt tên theo quy ước:
mãphiênbản.kiểubộcungứngdữliệu, ví dụ: 01.00.00.SQLDataProvider
Nó sẽ được đưa vào trong gói chuyển giao. Tùy thuộc vào bộ cung ứng dữ liệu nào được thiết
lập trong DNN, nó sẽ tìm đến mã lệnh sinh cơ sở dữ liệu thích hợp dựa vào giá trị mở rộng.
Một tệp khác bạn nên tạo như một phần của gói chuyển giao là mã lệnh dỡ cài đặt. Mã lệnh này
chủ yếu chứa đoạn chương trình dỡ để xóa các bảng và thủ tục lưu trong trường hợp người
quản trị portal muốn xóa module của bạn khỏi hệ thống DNN. Quy ước đặt tên của mã lệnh dỡ
cài đặt này như sau:
uninstall.kiểubộcungứngdữliệu, ví dụ: uninstall.SqlDataProvider
Phần III-2
Trong bài viết cuối này về kiến trúc của module, chúng ta sẽ tìm hiểu kiến trúc của lớp cung ứng
cơ sở dữ liệu, và cuối cùng là tạo ra bộ đóng gói và cài đặt module của chúng ta trong DNN.
Tạo Định nghĩa cho Đóng gói DNN của bạn
Tệp định nghĩa cài đặt cấu phần DNN là một tệp XML mô tả cấu trúc của module của bạn. Nó chứa một số
mẩu thông tin để DNN cài đặt module của bạn vào trong ứng dụng. Hãy xem mẫu đi kèm với module thăm
dò ý kiến.
<?xml version="1.0" encoding="utf-8" ?>
<dotnetnuke version="2.0" type="Module">
<folders>
<folder>
<name>CompanyName - Survey</name>
<description>Survey allows you to create custom surveys
to obtain public feedback</description>
<version>01.00.00</version>
<modules>
<module>
<friendlyname>CompanyName - Survey</friendlyname>
<controls>
<control>
<src>Survey.ascx</src>
<type>View</type>
</control>
<control>
<key>Edit</key>
<title>Create Survey</title>
<src>EditSurvey.ascx</src>
<iconfile>icon_survey_32px.gif</iconfile>
<type>Edit</type>
</control>
::
</controls>
</module>
</modules>
Hãy xem đoạn XML ở trên. Bạn có thể thấy chúng ta định nghĩa module tại mức cao nhất. Sau đó chúng ta
cần cho DNN biết module có chứa gì, đó sẽ là giao diện người sử dụng hoặc các tệp ascx. Trong module
thăm dò ý kiến, chúng ta có ba định nghĩa, chúng tôi nêu ra hai trong số đó, một là điều khiển xem và một
là điều khiển sửa. Bạn có thể thấy bên trong điều khiển sửa chúng ta đã định nghĩa tên tệp được sử dụng,
tên khóa, tiêu đề của module container, biểu tượng và kiểu của điều khiển, trong trường hợp này đó là điều
khiển sửa. Vì đây là điều khiển sửa, chúng ta có thể dùng giá trị Boolean cung cấp bởi DNN để kiểm tra
quyền xem liệu người sử dụng có quyền truy cập vào các chức năng sửa trên module hay không (bạn còn
nhớ “IsEditable” từ phần I không?).
Như vậy chúng ta đã định nghĩa được cấu trúc cơ bản của module, chúng ta cần định nghĩa các tệp thực tế
để tạo nên module của chúng ta. Các tệp này gồm có DLL, điều khiển ascx, bộ cung cấp dữ liệu, hình ảnh,
và bất kỳ tệp nào chúng ta sử dụng để hỗ trợ cho ứng dụng riêng của chúng ta.
::
<files>
<file>
<name>Survey.ascx</name>
</file>
<file>
<name>EditSurvey.ascx</name>
</file>
<file>
<name>EditSurveyOptions.ascx</name>
</file>
<file>
<name>YourCompanyName.Survey.dll</name>
</file>
<file>
<name>YourCompanyName.Survey.SqlDataProvider.dll</name>
</file>
<file>
<name>01.00.00.SqlDataProvider</name>
</file>
<file>
<name>Uninstall.SqlDataProvider</name>
</file>
<file>
<name>YourCompanyName.Survey.AccessDataProvider.dll</name>
</file>
<file>
<name>01.00.00.AccessDataProvider</name>
</file>
<file>
<name>Uninstall.AccessDataProvider</name>
</file>
<file>
::
</files>
</folder>
</folders>
</dotnetnuke>
Bây giờ tệp đã được tạo ra, hãy lấy toàn bộ tệp của module của bạn và nén chúng thành một tệp zip. Đây
là cấu phần riêng biệt (private assembly) mà bạn có thể chuyển giao. Hãy nhớ rằng bạn không cần phải
đựa các tệp chương trình nguồn vào gói này, chỉ cần cấu phần đã biên dịch, tệp ascx, và các tệp hỗ trợ
khác -- không cần tệp lớp filename.vb.
Cài đặt Cấu phần
Cuối cùng, bạn có module được đóng gói để chuyển giao, hãy tìm hiểu xem cài đặt nó vào portal DNN như
thế nào. DNN cung cấp một phương pháp rất đơn giản để cài đặt module vào portal thông qua chương
trình Quản lý Tệp (File Manager). Đây là lý do giải thích tại sao mọi công việc bạn làm để tạo một cấu
phần, một mã lệnh tạo SQL, và tệp .dnn, đi cùng với nhau như vậy người quản trị có thể dễ dàng cài đặt nó
vào hệ DNN. Sử dụng thủ tục sau để cài đặt module của bạn:
<!--[if !supportLists]-->1. <!--[endif]-->Đăng nhập vào với quyền Host.
<!--[if !supportLists]-->2. <!--[endif]-->Vào mục File Manager dưới thực đơn Host.
<!--[if !supportLists]-->3. <!--[endif]-->Dưới thực đơn Options, chọn Add New File(s).
<!--[if !supportLists]-->4. <!--[endif]-->Trong màn hình Upload File, chọn nút Custom Module.
<!--[if !supportLists]-->5. <!--[endif]-->Kích chuột nút browse để tìm ra gói cấu phần của bạn.
<!--[if !supportLists]-->6. <!--[endif]-->Kích Add để hiển thị gói trong danh sách
<!--[if !supportLists]-->7. <!--[endif]-->Kích Upload để tải cấu phần lên máy chủ.
Một khi tệp đã được tải lên, DNN sẽ xem tệp .dnn để tìm thông tin nó cần để thiết lập module của
bạn vào portal. File Manager sẽ hiển thị trạng thái của việc cài đặt module trên màn hình. Nếu có
lỗi nào xuất hiện trong quá trình cài đặt, DNN sẽ cho bạn biết bằng cách đưa ra màn hình lỗi chữ
màu đỏ in đậm.
Nếu tất cả cài đặt đúng, bạn có thể thêm module vào trang bằng việc chọn nó từ thực đơn thả.
KIẾN TRÚC DNN PORTAL
Nhân DNN: DNN được phát triển trên nền asp.net của MS
Mô hình hoạt động của .NET
2.5. Mô hình lập trình với DotNetNuke
2.5.1. Mô hình các đối tượng trong DNN components
Chúng ta hãy xem xét một ví dụ của việc tạo ra các lớp để có thể thao tác với đối tượng lớp nhân viên (ứng với bảng HT_NhanVien trong CSDL). Các components được tạo ra sẽ có dạng thức như sau. Trong ví dụ này, phương thức lấy thông tin của một nhân viên theo khóa chính MaNhanVien được sử dụng để cho thấy các đối tượng trong kiến trúc của DNN.
Mô hình của các đối tượng trong DNN được trình bày trong sơ đồ dưới đây
CT Khung Portal
Hiển thị thông tin
Themes, Skin, Transcoding
Xử lý các tác vụ của người dùng
Module tác vụ
Module tác vụ
Module tác vụ
Module tác vụ
Controller Class
Đối tượng điều khiển, sự dụng các phương thức của DataProvider để truy xuất dữ liệu.
Info Class
Lớp mô tả các đối tượng lưu trữ thông tin
DataProvider Class
Lớp ảo (abstract) định nghĩa các phương thức truy nhập dữ liệu. Lớp ảo này cho phép phát triển độc lập các mô tả truy nhập dữ liệu.
SqlDataProvider Class
Đối tượng truy nhập dữ liệu thực sự
Store Procedure
Các thủ tục ở CSDL MSSQL server được SqlDataProvider sử dụng