Hệ thống hỗ trợ dạy và học trực tuyến E-Comm Chương 1.Tổng quan: 1.1 Các đối tượng tham gia trong hệ thống: Học viên: là đối tượng chính mà hệ thống phục vụ, hoạt động chính của học vi
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC KINH TẾ TP HỒ CHÍ MINH
KHOA TIN HỌC QUẢN LÝ
-oOo -
CHUYÊN ĐỀ TỐT NGHIỆP
Đề tài:
Hệ thống hỗ trợ dạy và học trực tuyến E-Comm
GVHD: Đoàn Thiện Ngân
SVTH: Lê Tâm Ân
Lớp : TH1 Khóa: 34 MSSV: 108201402
Niên khóa: 2008-2012
Trang 2LỜI CẢM ƠN
Em xin chân thành cảm ơn các thầy cô trong khoa Tin Học Quản Lý, trường Đại Học Kinh Tế Thành Phố Hồ Chí Minh đã cung cấp cho em những kiến thức nền tảng về lĩnh Tin Học – Hệ Thống Thông Tin Quản Lý Đây là những kiến thức vô cùng hữu ích cho em trong công việc sau này
Em xin chân thành cảm ơn thầy Đoàn Thiện Ngân đã tận tình hướng dẫn, giúp đỡ
em trong quá trình thực hiện đề tài
Sinh Viên
Lê Tâm Ân
Trang 3Hệ thống hỗ trợ dạy và học trực tuyến E-Comm
Chương 1.Tổng quan:
1.1 Các đối tượng tham gia trong hệ thống:
Học viên: là đối tượng chính mà hệ thống phục vụ, hoạt động chính của học viên là tham gia vào các khóa học: trực tiếp tham gia vào lớp học(sử dụng hệ thống để giao tiếp với giảng viên,các học viên khác,các nguồn tài liệu), thực hiện các bài kiểm tra đánh giá kết quả…
Giảng viên: là đối tượng tương ứng với các lớp học, giảng viên tham gia vào lớp học với vai trò giảng dạy, sử dụng hệ thống để truyền đạt kiến thức đến các học viên đồng thời là người thiết kế các bài kiểm tra ứng với từng môn học
Nhân viên quản lý: là đối tượng quản lý hệ thống: quản lý thông tin tài khoản người sử dụng hệ thống, quản lý quyền truy cập hệ thống của các đối tượng người sử dụng,thiết kế các khóa học, sắp xếp bố trí giảng viên – lớp học, mở các lớp học để học viên và giảng viên tham gia vào hoạt động dạy và học…
1.2 Tổng quan chức năng của cả hệ thống:
Hệ thống E-comm là hệ thống phẩn mềm, một công cụ hỗ trợ cho công tác dạy
và học trên hệ thống máy tính nối mạng Chức năng cơ bản của hệ thống chính là tạo
ra một trường cộng tác, mà trên đó những người sử dụng(ở đây là học viên và giảng viên) có thể truyền thông mà không phụ thuộc vào vị trí địa lý (trong hệ thống này đó chính là tạo ra môi trường cộng tác như một lớp học truyển thống)
1.3 Phương pháp phân tích thiết kế: phân tích thiết kế hướng đối tượng
1.4 Công nghệ lập trình:
-Ngôn ngữ lập trình: C#
(IDE: Visual Studio 2010 ultimate)
-Giao diện người dùng: Microsoft Windows Presentation Foundation (WPF) tuân theo thiết kế MVVM(Model-View-ViewModel)
-Mô hình Client-Server: dùng công nghệ WCF để tổ chức truyền thông giữa Client và Server
-Hệ quản trị cơ sở dữ liệu: SQL Server 2008
Trang 4Chương 2 Cơ sở lý thuyết:
2.1.Dependency Injection (DI):
“Dependency Injection là một bộ các quy tắc thiết kế phần mềm giúp cho chúng ta viết
ra những dòng code có sự liên hệ lỏng lẻo với nhau nhất mà không làm thay đổi hiệu quả của sự kết hợp giữa các đối tượng.”
Trang 4,Manning Dependency Injection in NET
Có thể nói ngay bản thân ngữ nghĩa của nó đã giải thích “dependency injection” là gì – dependency injection chính là “loại bỏ sự phụ thuộc”
Mục đích DI là gì? Mục đích của các kỹ thuật lập trình có thể nói là để tạo ra các phần mềm có thể hoạt động có hiệu quả Một trong những mục đích khác đó là tạo ra những đoạn code có thể duy trì và mở rộng một cách dễ dàng.Một trong những cách để đạt được điều đó chính là sử dụng quy tắc “loose coupling” ”loose coupling” chính là loại
bỏ sự kết hợp quá chặt chẽ trong mối quan hệ giữa các đối tượng DI không là gì hơn
là một kỹ thuật áp dụng “loose coupling”
“ Lập trình là với “Interface” chứ không phải với một thể hiện của đối tượng.”
(Erich Gamma và ctv,1994)
“Loose coupling” giúp cho các dòng code dễ dàng được thay đổi và mở rộng
http://www.berchtel.com/archive/diplomathesis/html/04-fundamentals.html
“Dependency Injection” được biết đến nhiều từ cộng đồng Java khi họ cố gắng tìm
kiếm những cách thức khác nhau để tạo ra các phần mềm lớn và phức tạp Việc ứng dụng DI giúp cho việc kết nối các thành phần của các lớp(layer) lại với nhau Các thành phần đó thường được phát triển bởi các đội khác nhau với các cách thức riêng của họ Một trong những nhiệm vụ phổ biến của một “kiến trúc sư phần mềm” đó là kết nối các thành phần đó lại thành một ứng dụng thống nhất Một số mẫu qui tắc thiết
kế (Design Patterns) như “Factory Method”, “Abstract Factory”, “Builder”, đã được
Trang 5Trong đề tài này hệ thống được xây dựng tuân theo mô hình MVVM dựa trên nền tảng
“Wpf Application Framework” (link:waf.codeplex.com) và sử dụng MEF (Managed Extensibility Framework, liên kết : mef.codeplex.com) để cài đặt “dependency injection”
2.2 Mô hình MVVM
2.2.1 Giới thiệu mô hình Model-View-ViewModel
Tại sao bạn nên sử dụng mẫu thiết kế Model – View – ViewModel? Thực tế việc sử dụng pattern này trong quá trình phát triển các ứng dụng WPF hoặc Silverlight mang lại cho nhà phát triển nhiều lợi ích, có thể kể đến như sự tương tác hiệu quả giữa người thiết kế giao diện và lập trình viên, khả năng sử dụng lại các thành phần hay việc thay đổi giao diện chương trình mà không cần thiết phải viết lại code quá nhiều
2.2.2 Giải thích thuật ngữ
MVVM là viết tắt của Model –View – ViewModel Hình ảnh dưới đây sẽ mô tả về
mối quan hệ giữa các thành phần trong pattern này
2.2.2.1 Model
Trong thế giới lập trình, model đại diện cho các dữ liệu, thông tin mà chúng ta cần thao tác Một ví dụ về model đó là contact (thông tin liên lạc), nó sẽ bao gồm tên, số điện thoại, địa chỉ, … Đơn vị của Model chính là Class Như vậy xét ví dụ về model contact, chúng ta sẽ có class Contact, hay một ví dụ khác như class Customer dùng để lưu trữ thông tin về khách hàng, class Supplier lưu trữ các thông tin về các nhà cung cấp… Các class trong Model của MVVM đều giống như các class bình thường khác, chúng đều có một số các phương thức, properties… hay khả năng tự động lưu dữ liệu của nó và cơ sở dữ liệu
Tuy nhiên cần phải lưu ý đó là model chỉ lưu giữ thông tin mà thôi, nó không quan tâm đến các hoạt động hay dịch vụ có thể thay đổi, điều khiển các thông tin đó Tuy nhiên ta có thể định nghĩa thêm các thuộc tính(attribute) nhằm phục vụ cho việc hiển thị trên giao diện hoặc là sử dụng các Type Converter chuyển đổi model về các kiểu
dữ liệu mà ngôn ngữ lập trình hỗ trợ để tối ưu hóa giao diện người dùng
Trang 62.2.2.2 ViewModel
ViewModel là class định nghĩa cách dữ liệu tương tác với người dùng thông qua view Nói cách khác ViewModel là model của View
Một lưu ý quan trọng đó là ViewModel không mô tả giao diện sẽ trông như thế nào
Nó chỉ mô tả cách mà view hoạt động và thông tin nào sẽ được cung cấp cho người dùng
Vấn đề cần bàn luận ở đây là, liệu ViewModel sẽ ảnh hưởng như thế nào đến phần hiển thị của View, ví dụ như việc xác định nội dung của một label, bạn sẽ sử dụng View hay ViewModel? Điều này tùy thuộc hoàn toàn vào đối tượng cũng như dự
án mà bạn đang làm Đôi khi label đó sẽ có nội dung do ViewModel quy định (bởi vì bạn cần thay đổi nội dung của label tùy theo sự kiện xảy ra), hay có khi designer sẽ quyết định label sẽ hiển thị như thế nào Nói chung, nếu nó không phụ thuộc vào cơ sở
dữ liệu thì nó sẽ thuộc về thẩm quyền của designer – tức là được định nghĩa trong View chứ không phải ViewModel
2.2.2.3 View
View là thành phần duy nhất mà người dùng có thể tương tác được trong chương trình,
nó chính là thành phần mô tả dữ liệu Trong WPF, view là một UserControl, lưu ý mặc dù View chính là UserControl nhưng không nhất thiết UserControl phải làView
Vậy làm thế nào để phân biệt được? Rất đơn giản Ban đầu bạn khởi tạo class ViewModel trước, như vậy bạn đã cóViewModel để quản lí các chức năng cần thiết, việc cuối cùng là tạo class View nhằm cho phép người dùng sử dụng các chức năng đó Nếu một tính năng hiển thị nào đó nằm trên view và là một phần của ViewModel đã được khai báo trước đó, nhưng lại không có ViewModel của riêng
nó thì đó đơn thuần chỉ là một UserControl
Ví dụ, trong class CustomerEditViewModel mô tả ở trên, địa chỉ của khách hàng sẽ được hiển thị và có thể thay đổi được bởi người dùng Ta có thể đưa việc hiển thị và thay đổi nội dung vào trong cùng một UserControl duy nhất, tuy nhiên UserControlnày
Trang 7cho phép chúng ta thay đổi giao diện của ứng dụng mà chỉ cần viết lại phần View, các tính năng của View được định nghĩa trong ViewModel sẽ vẫn tiếp tục được giữ lại như trước Chính vì lẽ đó nên View cần phải biết rõ về ViewModel của nó, tuy nhiên ViewModel „hầu như‟ không nên biết về View
Với việc sử dụng MVVM pattern, bạn có thể giao phần View lại cho designer thực hiện công việc của họ Họ có thể thay đổi giao diện như thế nào tùy thích (tất nhiên là vẫn phải theo một quy định nào đó) trong khi data source và các tính năng tương tác giữa giao diện với người dùng trong ViewModel vẫn giữ nguyên như cũ và hoạt động một cách chính xác
Ở đây chúng ta sử dụng WPF do đó thứ cụ thể mà chúng ta cần phải quan tâm chính
là DataContext của phần View Nói rõ hơn, mỗi element nằm trong View đều được kết nối tới các properties trong ViewModel bằng data binding ViewModel sẽ lại lấy dữ liệu từ Model (chính là class Customer) và liên kết các properties có thể được thay đổi bởi user vào các Observable properties
Observable properties là các properties của ViewModel, chúng có thể tự động thông báo cho giao diện của chương trình biết mỗi khi giá trị của nó thay đổi bằng cách cài đặt INotifyPropertyChanged interface
2.2.4 Điều khiển hoạt động của toàn bộ ứng dụng
Trong hầu hết các ứng dụng WPF sẽ có một cửa sổ đầu tiên được khởi tạo gọi
là MainWindow – và hầu hết các ứng dụng MVVM xem nó như là một View và tạo ra một class ViewModel tương ứng gọi là MainWindowViewModel
Trong mô hình MVVM mà tác giả của bài viết này xây dựng có sử dụng một “thứ” gọi
là Controller Nó là một class bình thường (không liên quan gì đến giao diện) có nhiệm
vụ điều khiển hoạt động của ứng dụng Đối với các ứng dụng lớn, có thể có nhiều Controllers với một vài chức năng cơ bản Tuy nhiên không phải
Có thể gói gọn các nhiệm vụ chính của Controller đó là:
Khởi tạo View cùng với ViewModel tương ứng
Gởi các yêu cầu dữ liệu
Quản lí việc cập nhật dữ liệu
Quản lí hoạt động của View phù hợp theo từng thời điểm sự kiện xảy ra
Như vậy, khi ứng dụng được khởi chạy, một đối tượng Controller được khởi tạo Nó sẽ truyền tham chiếu của chính nó vào mọi ViewModel, cho phép các ViewModel đó sử dụng các chức năng được cung cấp bởi Controller
Phần View mà Controller tạo ra cũng có thể có nhiều view con (child view) khác và được định vị ở lúc thiết kế – trong trường hợp này ViewModel cũng sẽ cần phải tạo ra các ViewModel con tương ứng
Như vậy, Controller có thể vừa có khả năng đẩy dữ liệu đến ViewModel, hoặc ViewModel cũng có khả năng yêu cầu dữ liệu từController Việc này tùy thuộc vào sở thích và suy nghĩ của mỗi người
Trang 8Đi sâu hơn vào ví dụ về yêu cầu của ông chủ được trình bày ở trên, nội dung yêu cầu
bây giờ được mô tả chi tiết hơn: “Hiển thị một danh sách khách hàng cho người dùng
và cho phép họ được phép sửa đổi thông tin đó Khi một item được lựa chọn, họ có thể thay đổi và sau đó lưu lại chúng”
Công việc của Controller lúc này là:
Khởi tạo một đối tượng CustomerSelectionViewModel
Cung cấp một danh sách các đối tượng Customer
để CustomerSelectionViewMode có thể sử dụng và thao tác trên đó
Khởi tạo đối tượng CustomerSelectionView và gán giá trị thuộc tính DataContext của nó là CustomerSelectionViewModel
Hiển thị CustomerSelectionView
Bây giờ, khi người dùng lựa chọn một customer từ trong danh sách được View hiển thị,
nó sẽ send một command đếnViewModel ViewModel lại báo với Controller rằng vừa
có một đối tượng Customer được select (và tất nhiên là phải biết chính xác đó là đối tượng nào) Lúc này, Controller sẽ:
Lấy dữ liệu cho đối tượng Customer được yêu cầu (trong trường hợp chưa lấy toàn bộ thông tin)
Khởi tạo CustomerEditViewModel và truyền cho nó thông tin về đối tượng Customer được chọn
Khởi tạo CustomerEditView và gán DataContext của nó cho CustomerEditViewModel
Hiển thị CustomerEditView
2.2.5 Giao tiếp giữa các ViewModel
Tất nhiên sẽ có lúc ta gặp phải trường hợp có nhiều hơn một ViewModel trong dự án,
và mỗi khi thay đổi nội dung trong ViewModel này thì ViewModel cũng phải thay đổi tương ứng Trong ví dụ về Selection/Edit Customer mà nãy giờ chúng ta quan tâm, Selection cần phải được refresh mỗi khi dữ liệu được lưu lại sau khi Edit xong Trong trường hợp này, nhiều kiểu mô hình MVVM sử dụng giải pháp là tạo ra class Messenger hoặc Mediator Nó cho phép cácViewModel yêu cầu được thông báo mỗi khi có một thông điệp được gởi từ một ViewModel khác nào đó, và tất nhiên cũng
Trang 9Tuy nhiên, ViewModel lại không nên có quyền gởi thông điệp Khi ViewModel muốn
thực hiện một chức năng nào đó, nó sẽ yêu cầu Controller thực thi chức năng
đó Controller sau đó lại xử lí việc gởi các thông điệp Nói một ngắn gọn
thì Controller sẽ là nơi thực hiện việc gởi thông điệp chứ không phải là ViewModel
Một ví dụ cụ thể để hiểu rõ hơn về vấn đề này, đối tượng CustomerEdit
ViewModel khi biết được người dùng vừa cập nhật dữ liệu của Customer object, nó sẽ
thông báo cho Controller biết rằng ‘Khách hàng 123 vừa mới cập nhật dữ liệu xong’
2.2.6 Kết nối với dữ liệu(Data Binding)
Là kĩ thuật dùng để tạo gắn kết giữa phần giao diện (UI) và dữ liệu thông qua phần
business logic Nhờ Data Binding, UI có thể tự động cập nhật lại để hiển thị các thay
đổi trong dữ liệu.Ngoài ra, Data Binding trong WPF còn hỗ trợ các chiều khác nhau,
nghĩa là các thay đổi có thể cập nhật từ UI vào dữ liệu
Một Binding bao gồm 4 thành phần chính là: binding target, target property, binding
source và một path (đường dẫn) đến giá trị cần thiết trong binding source, thông
thường path này là một source property
Ví dụ ta muốn gắn property Name của một đối tượng Person cho property Text của
một TextBox Khi đó:
- Binding target: TextBox
- Target property: property Text của TextBox
- Binding source: đối tượng Person
-Path: đường dẫn đếnproperty Name của đối tượng Person
Mô hình Data Binding của WPF theo hình minh họa sau:
Trang 10Cần lưu ý là target property phải là một dependency property Đa số các property của lớp UIElement đều là các dependency property Đối với binding source, bạn có thể sử dụng bất kì đối tượng NET nào, chẳng hạn như các đối tượng trong ADO.NET, XML hay các control trong WPF
property Sau đó việc cập nhật dữ liệu sẽ không được thực hiện
OneWayToSource Giống OneWay nhưng theo hướng ngược
lại: cập nhật từ target property sang source property
Với target property mà người dùng có thể thay đổi giá trị (như TextBox.Text) thì nó
là TwoWay, còn lại là OneWay
Update Source Trigger
Với Binding Mode là TwoWay hoặc OneWayToSource, bạn có thể xác định thời điểm
mà binding source sẽ được cập nhật lại thông qua property
Binding.UpdateSourceTrigger Enum UpdateSourceTrigger gồm 4 giá trị:
Trang 11LostFocus Cập nhật binding source khi binding target mất focus
Explicit Cập nhật binding source chỉ khi bạn gọi phương thức UpdateSource
DataContext Property
Khái niệm Data Context tương tự như Data Source, đây là một property của FrameworkElement dùng để lưu dữ liệu cho việc hiển thị lên UI Khi sử dụng cho data binding, DataContext sẽ được gán bằng đối tượng binding source
Trang 12Chương 3.Phân tích thiết kế:
6:Thực hiện bài kiểm tra
7:Đăng ký tài khoản
8:Xem thư viện đề thi
<<extend>>
8.3 Thêm đề thi 8.2 Xóa đề thi
8.4 Chỉnh sửa đề thi
<<extend>>
<<extend>>
4.2 Tham gia lớp học
Trang 133.2.Sơ đồ hoạt động:
3.2.1 Đăng nhập (Usecase 1)
System NguoiDung
Nhập tên đăng nhập và mật khẩu
Xác nhận đăng nhập
Giải mã thông tin đăng nhập kiểm tra mật khẩu
[Mật khẩu hợp lệ]
[Mật khẩu không hợp lệ]
Trang 143.2.2 Đăng xuất (Usecase 2)
System NguoiDung
Chọn đăng xuất
Tạo thông tin đăng xuất Xác nhận đăng xuất
Trang 153.2.3 Gửi/nhận thông điệp (Usecase 3)
NguoiDung 2System
NguoiDung 1
Nhập thông điệp
Xác nhận gửi thông điệp
Gửi thông điệp
Nhận thông điệp
Hiển thị thông điệp
Xem thông điệp
Trang 163.2.4 Chọn lớp học (Usecase 4)
System NguoiDung
Chọn lớp học
Chọn xem chi tiết
Hiển thị thông tin chi tiết lớp học
3.2.5 Tạo lớp học (Usecase 4.1)
System NguoiDung
Chọn mở phòng học
Mở lớp học và tạo lịch sử lớp học
Trang 173.2.6 Tham gia lớp học ( Usecase 4.2)
SystemNguoiDung
Chọn tham gia lớp học
Kiểm tra trạng thái lớp học
[Không hợp lệ] Tạo thông tin đăng nhập
[Hợp lệ]
Trang 183.2.7 Đăng ký lớp học (Usecase 5)
SystemHocVien
Trang 193.2.8 Thực hiện bài kiểm tra(Usecase 6)
Chọn lớp học và môn học
Hiển thị bài kiểm tra cần thực hiện
Chọn tìm kiếm
Hiển thị danh sách kết quả
Chọn bài kiểm tra
Xác nhận
Khởi tạo bài kiểm tra
Nhập câu trả lời
Kết thúc bài kiểm tra
Lưu thông tin bài kiểm tra và xuất kết quả nếu có
Trang 203.2.9 Đăng ký tài khoản (Usecase 7)
System HocVien
Nhập thông tin cá nhân
Nhập tên đăng nhập và mật khẩu
Kiểm tra thông tin nhập Xác nhận đăng ký
[Hợp lệ]
Cập nhật hồ sơ học viên [Không hợp lệ]
Trang 213.2.10 Xem thƣ viện đề thi (Usecase 8)
System GiangVien
Chọn môn học và loại đề thi
Chọn lọc kết quả
Tìm kiếm và hiển thị danh sách đề
3.2.11 Xem thông tin đề thi (Usecase 8.1)
SystemGiangVien
Chọn đề
Chọn xem thông tin đề thi
Hiển thị thông tin đề thi
Trang 223.2.12 Usecase 8.2:Xóa đề thi
SystemGiangVien
Chọn đề
Chọn xóa đề thi
Kiểm tra quyền xóa đề
Yêu cầu xác nhận xóa
[Hợp lệ]
[Không hợp lệ]
Yêu cầu xác nhận xóa
Xóa đề được chọn
Trang 233.2.13 Thêm đề thi (Usecase 8.3)
SystemGiangVien
Chọn thêm đề thị
Hiên bảng nhập thông tin đề
Nhập thông tin đề thi
Xác nhận thêm đề
Kiểm tra thông tin nhập
Lưu đề thi mới [Hợp lệ]
[Không hợp lệ]
Trang 243.2.14 Chỉnh sửa đề thi (Usecase 8.4)
SystemGiangVien
Chọn đề thi
Chọn thay đổi chi tiết đề thi
Kiểm tra quyền
Trang 253.3.2 Đăng xuất:
Trang 263.3.3 Gửi/nhận thông điệp:
Trang 323.3.6 Thực hiện bài kiểm tra: