0
Tải bản đầy đủ (.doc) (75 trang)

Bảng 3.7: Thiết kế bảng Zone Bảng 3.8: Thiết kế bảng Distribution

Một phần của tài liệu XÂY DỰNG HỆ THỐNG QUẢN TRỊ NỘI DUNG SỬ DỤNG WINDOWS AZURE PLATFORM (Trang 57 -75 )

thuộc nhiều nhóm bài viết.

STT Tên trường Kiểu dữ liệu Mô tả

1 ContentID INT Khóa chính, mã bài viết

2 Version INT Khóa chính, phiên bản bài viết

3 ZoneID INT Khóa chính, mã nhóm bài viết

4 Ranking INT Cấp độ bài viết

5 ModifiedDate DATETIME Ngày thay đổi thông tin cuối cùng 6 CreationDate DATETIME Ngày tạo phân phối

Bảng 3.8: Thiết kế bảng Distribution

Hình 3.7: Lược đồ CSDL

3.3. Xây dựng các thành phần ứng dụng

3.3.1. Mô hình dữ liệu đối tượng sử dụng Table Storage

Ở ứng dụng này, ta sẽ sử dụng mô hình dữ liệu Table Storage của Windows Azure để tạo ra cấu trúc bảng dữ liệu (xem chương 2, phần 2.2.1.2 Dịch vụ Storage ), các bảng sẽ được thể hiện thông qua các lớp đối tượng (class) với các trường tương ứng là các thuộc tính của lớp. Cũng tương tự, các hàm (function), thủ tục lưu (stored procedure) sẽ được cài đặt như là các phương thức của lớp.

Các lớp này đều thừa kế từ lớp TableServiceEntity định nghĩa trong namespace Microsoft.WindowsAzure.StorageClient. Khi WebRole được khởi tạo, chương trình sẽ dựa trên khai báo của lớp để tạo nên mô hình dữ liệu tương ứng trên Tabl Storage, thao tác này chỉ thực hiện một lần.

Ví dụ:

// lay the hien doi tuong Storage Account thong qua chuoi ket noi var account =

CloudStorageAccount.FromConfigurationSetting("DataConnectionString");

// tao table Accounts tu mo hinh du lieu khai bao trong AccountContext

CloudTableClient.CreateTablesFromModel(typeof(AccountContex t),

account.TableEndpoin t.AbsoluteUri, account.Credentials);

// khoi tao du lieu cho bang Account

...

Sau đây là mô tả các lớp đối tượng và các phương thức tương ứng:

Lớp Account:

public class Account :

Microsoft.WindowsAzure.StorageClient.TableServiceEntity {

// primary key: AccountID

public int AccountID { get; set; } public string UserName { get; set; } public string Password { get; set; } public string Email { get; set; }

public DateTime ModifiedDate { get; set; } public DateTime CreationDate { get; set; }

// constructor

public AccountContext(string baseAddress, StorageCredentials credentials): base(baseAddress, credentials);

public void Insert(string username, string password, string email);

// cap nhat thong tin user

public void Update(int accountID, string username, string password,

string email); // xoa 1 user

public void Remove(int accountID); // get Accounts

public List<Account> GetAccounts(); // tra lai doi tuong Account tu AccountID

public Account GetAccountForID(int accountID); public int GetAccountID(string username);

// kiem tra co ton tai Account thong qua AccountID

public bool Exist(int accountID);

// xac thuc tai khoan

public bool Authenticated(string username, string password);

Lớp AccountProperty

public class AccountProperty :

Microsoft.WindowsAzure.StorageClient.TableServiceEntity {

// primary key: AccountID, Property

public int AccountID { get; set; } public string Property { get; set; } public string Value { get; set; }

public DateTime ModifiedDate { get; set; } public DateTime CreationDate { get; set; }

// tao account property moi

public void Insert(int accountID, string property, string value) ;

// cap nhat mot account property

public void Update(int accountID, string property, string value);

// xoa cac account property co cung AccountID = accountID

public void Remove(int accountID);

// xoa mot account property

public void RemoveProperty(int accountID, string property);

// lay value cua 1 account property

public string GetValue(int accountID, string property);

Lớp AccountRole

public class AccountRole :

Microsoft.WindowsAzure.StorageClient.TableServiceEntity {

// primary key: AccountID, Role

public int AccountID { get; set; } public string Role { get; set; }

public DateTime CreationDate { get; set; }

// them moi 1 account role

public void Insert(int accountID, string role);

// xoa bo account role

public void Remove(int accountID);

// get all role

public List<AccountRole> GetAllRole(string role);

// get all role cho 1 accID

public List<AccountRole> GetRolesForID(int accountID);

// kiem tra quyen cho 1 user

public bool Authorization(ArrayList roles, string username, CloudStorageAccount strAccount);

Lớp Content

public class Content :

Microsoft.WindowsAzure.StorageClient.TableServiceEntity {

// primary key: ContentID, Version

// foreign key: ByLine --> Account.AccountID

// foreign key: UpdateUserID --> Account.AccountID

public int ContentID { get; set; } public int Version { get; set; } public int Protected { get; set; } public string Headline { get; set; } public string Source { get; set; } public int Byline { get; set; } public string Teaser { get; set; } public string Body { get; set; } public string TagLine { get; set; } public int Status { get; set; } public int Editor { get; set; } public int Approver { get; set; } public int UpdateUserID { get; set; } public DateTime ModifiedDate { get; set; } public DateTime CreationDate { get; set; }

// tao ContentID moi = MAX(ContentID) + 1

// them 1 Content moi

public void Insert(int contentID, int version, int isProtected,

string headline, string source, int byline, string teaser, string

body, string tagline, int editor, int approver, int updUserID,

int status);

// overload

public void Insert(string headline, string source, int byline,

string teaser, string body, string tagline);

// cap nhat thong tin 1 Content

public void Update(int contentID, int version, int isProtected,

string headline, string source, int byline, string teaser, string

body, string tagline, int editor, int approver, int updUserID,

int status);

// set status bai viet

public void SetStatus(int contentID, int version, int status);

// set editor

public void SetEditor(int contentID, int version, int editor);

public void SetApproval(int contentID, int version, int approver);

public void SetProtected(int contentID, int version, int

isProtected);

public List<Content> GetHeadlines();

public List<Content> GetHeadlinesForAuth(int byLine); public List<Content> GetHeadlinesForEdit(int editor); public List<Content> GetHeadlinesForApprove(int approver); public List<Content> GetContentForID(int cid);

public Content GetContentForIDVer(int cid, int ver); public void Remove(int cid, int ver);

Lớp ContentRank

public class ContentRank :

Microsoft.WindowsAzure.StorageClient.TableServiceEntity {

// primary key: RankID

public int RankID { get; set; } public string Rank { get; set; }

public List<ContentRank> GetRanks(); public int GetRankID(string rank);

Lớp Distribution

public class Distribution :

Microsoft.WindowsAzure.StorageClient.TableServiceEntity {

// primary key: ContentID, Version, ZoneID

public int ContentID { get; set; } public int Version { get; set; } public int ZoneID { get; set; } public int Ranking { get; set; }

public DateTime ModifiedDate { get; set; } public DateTime CreationDate { get; set; }

public void Insert(int contentID, int version, int zoneID, int

ranking);

public List<Distribution> GetOrdered(int zoneID);

public void UpdateRank(int zoneID, int contentID, int version, int

ranking);

public void Remove(int cid, int ver);

Lớp Domain

public class Domain :

Microsoft.WindowsAzure.StorageClient.TableServiceEntity {

// primary key: DomainID

public int DomainID { get; set; } public string DomainType { get; set; } public int Protected { get; set; } public string Title { get; set; }

public string Description { get; set; } public DateTime ModifiedDate { get; set; } public DateTime Creationdate { get; set; }

public List<Domain> GetAll()

public List<Domain> GetDomainForID(int did)

Lớp Role

Microsoft.WindowsAzure.StorageClient.TableServiceEntity {

// primary key: RoleID

public int RoleID { get; set; } public string RoleName { get; set; }

public List<Role> AllRoles()

Lớp Zone

public class Zone :

Microsoft.WindowsAzure.StorageClient.TableServiceEntity {

// primary key: ZoneID

// foreign key: DomainID --> Domain.DomainID

public int ZoneID { get; set; } public int Protected { get; set; } public string Title { get; set; }

public string Description { get; set; } public int DomainID { get; set; }

public DateTime ModifiedDate { get; set; } public DateTime CreationDate { get; set; }

public List<Zone> GetZonesForDomain(int domainID) public Zone GetZone(int zoneID)

public bool isProtected(int zoneID)

3.3.2 Xây dựng các phân hệ

Hệ thống bao gồm 5 phân hệ chính: Authoring (Viết bài), Editing (Biên tập), Approving (Phê duyệt), Deploying (Triển khai) và Quản lý tài khoản. Mỗi nhóm người dùng sẽ có thể sử dụng các tính năng của phân hệ với quyền tương ứng. Các phân hệ được thiết kế tương ứng với các trường hợp sử dụng.

Phân hệ Authoring

Phân hệ Author gồm các form và tính năng:

- Form tạo bài viết mới với giao diện trực quan

- Form chỉnh sửa bài viết (trước khi submit) - Lưu bài viết theo các phiên bản.

- Xem danh sách các bài viết của mình - Submit bài viết lên nhóm biên tập (editor)

Người dùng thuộc nhóm Editor có thể thực hiện các chức năng biên tập trong phân hệ này, bao gồm:

- Xem danh sách các bài viết được người dùng nhóm Author đưa lên - Chỉnh sửa các bài viết

- Lưu bài viết theo các phiên bản

- Trả lại bài viết cho tác giả (Author) để chỉnh sửa lịa - Từ chối biên tập (Editor khác có thể nhận biên tập) - Submit bài viết lên để phê duyệt (approve)

Phân hệ Approving

Các tính năng trong phân hệ này:

- Xem danh sách bài viết đã được biên tập

- Duyệt bài viết lên nhóm Deployer - Trả lại bài viết để biên tập lại

Phân hệ Deploying

Các tính năng trong phân hệ này

- Xem danh sách bài viết đã được phê duyệt - Triển khai bài viết vào một nhóm bài viết (Zone) - Xem danh sách bài viết đã được triển khai

- Đưa 1 bài viết đã được triển khai về trạng thái lưu trữ (archive) - Trả lại bài viết để sửa lại

Phân hệ quản lý tài khoản:

Phân hệ này cho phép Administrator thực hiện các thao tác - Xem danh sách tài khoản người dùng - Xem thông tin tài khoản người dùng - Sửa thông tin tài khoản người dùng - Tạo tài khoản mới

- Xóa tài khoản người dùng

Người dùng cũng có thể sử dụng phân hệ này để xem và sửa thông tin cá nhân.

Kết chương

Như vậy chương này đã đưa ra khái niệm về hệ thống quản trị nội dung cùng với những lợi ích mà nó đem lại, mô tả các yêu cầu cơ bản để xây dựng một hệ thống quản trị nội

dung, mô hình hệ quản trị nội dung xây dựng trên môi trường Windows Azure, mô hình các chức năng và dữ liệu.

Ở chương tiếp theo, chúng ta sẽ khảo sát kết quả thử nghiệm hệ thống và đánh giá.

CHƯƠNG 4: THỬ NGHIỆM VÀ ĐÁNH GIÁ

4.1. Triển khai hệ thống lên Windows Azure

Một số hình ảnh của hệ thống và cách sử dụng:

Hình 4.1: Upload gói mã nguồn (*.cspkg) và file cấu hình (*.cscfg) lên môi trường Staging Deployment của Hosted Service

Hình 4.2: Tạo Storage Account, thu được Primary Key Access và Endpoints

Cấu hình Hosted Services

Hình 4.3: Cấu hình số instances, khai báo Storage Account Key

Hình 4.4: Test hệ thống trong môi trường Staging

Deploy hệ thống sang môi trường Production

Hình 4.5: Deploy hệ thống sang môi trường Production

Hình 4.6: Thế hiện nội dung bài viết

Giao diện quản trị (Author)

Hình 4.7: Phần quản trị: Author xem danh sách bài viết

Hình 4.8: Author viết bài

Biên tập

Hình 4.9: Editor biên tập bài viết

Hình 4.10: Phê duyệt bài viết

Triển khai bài viết

Hình 4.11: Deployer triển khai bài viết

Hình 4.12: Quản lý tài khoản - Danh sách tài khoản

Hình 4.13: Quản lý tài khoản – Tạo tài khoản mới

4.2. Đánh giá hệ thống

Hệ thống CloudCMS về mặt cơ bản đã đáp ứng được những yêu cầu cho một hệ thống quản trị nội dung, ưu điểm của hệ thống:

Giao diện trực quan để thực hiện các công việc: Viết bài, Biên tập, Duyệt bài, Triển khai

Cho phép quản lý bài viết theo phiên bản

Khả năng quản lý tài khoản và giới hạn tài khoản người dùng.

Sử dụng Windows Azure Storage Service để lưu trữ dữ liệu bài viết, qua đó giảm được chi phí sử dụng SQL Azure và tăng tính linh hoạt cho hệ thống.

Tuy nhiên, để có thể triển khai thành một CMS chuyên nghiệp, hiệu quả hệ thống còn một số nhược điểm:

Khả năng tùy biến giao diện còn hạn chế

Chỉ phù hợp với những trang web quy mô vừa và nhỏ

Chi phí tính toán trên Windows Azure còn tương đối cao.

Kết chương

Như vậy chương này đã giới thiệu quá trình từ triển khai ứng dụng lên môi trường Windows Azure Platform, thử nghiệm quy trình hệ thống với các tính năng Viết bài, Biên tập, Duyệt bài và Triển khai. Hệ thống về cơ bản đã hoạt động ổn định trên môi trường Windows Azure (với tên miền http://cloudcms.cloudapp.net). Chương này cũng đưa ra nhận xét, đánh giá về những ưu điểm và nhược điểm của hệ thống.

TÀI LIỆU THAM KHẢO

Các tài liệu, bài báo khoa học

[1] Cloud Computing, A Seminar Report -Maheswaran.M [2] Introduction to Cloud Computing - Sun MicroSystems

[3] Architectural Strategies for Cloud Computing - Oracle White Paper

[4] Introducing the Windows Azure Platform, v1.2 – Chappell - Microsoft White Paper

[5] Introducing Windows Azure - David Chappell - Microsoft White Paper March 09

[6] An Introduction to Windows Azure Platform AppFabric for Developers - Microsoft

[7] Real World ASP.NET: Building a Content Management System - Stephen Fraser – Appress 2002

Các trang web

[8] IBM http://www.ibm.com

[9] Microsoft Windows Azure Homepage http://microsoft.com/windowsazure

[10]Ecomworld http://ecomworld.com

[11]http://infreemation.net

[12]www. forrester .com/

Một phần của tài liệu XÂY DỰNG HỆ THỐNG QUẢN TRỊ NỘI DUNG SỬ DỤNG WINDOWS AZURE PLATFORM (Trang 57 -75 )

×