Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 209 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
209
Dung lượng
3,9 MB
Nội dung
TRẦN ĐÌNH QUẾ GIÁO TRÌNH IT KIẾN TRÚC PT VÀ THIẾT KẾ PHẦN MỀM HÀ NỘI - 2017 MỤC LỤC LỜI GIỚI THIỆU i CHƢƠNG 1: KHÁI NIỆM CƠ BẢN VỀ KIẾN TRÚC PHẦN MỀM 1.1 ĐỘ PHỨC TẠP PHẦN MỀM 1.1.1 Độ phức tạp phần mềm gì? 1.1.2 Độ phức tạp thành phần phần mềm 1.1.3 Ảnh hưởng độ phức tạp phần mềm 1.2 KIẾN TRÚC PHẦN MỀM 1.3 MỘT SỐ KHÁI NIỆM CƠ BẢN 1.3.1 Kiến trúc 1.3.2 Thành phần 1.3.3 Kết nối IT 1.3.4 Cấu hình 1.3.5 Kiểu kiến trúc 1.3.6 Mẫu kiến trúc .7 1.3.7 Mơ hình kiến trúc 10 PT 1.4 KẾT LUẬN 10 BÀI TẬP 10 CHƢƠNG 2: THIẾT KẾ KIẾN TRÚC VÀ CÁC KIỂU KIẾN TRÚC 12 2.1 TIẾN TRÌNH THIẾT KẾ KIẾN TRÚC 12 2.1.1 Hiểu vấn đề cần giải 13 2.1.2 Xác định phần tử thiết kế quan hệ chúng 13 2.1.3 Đánh giá thiết kế kiến trúc 13 2.1.4 Biến đổi thiết kế 14 2.2 CÁC NGUYÊN LÝ THIẾT KẾ KIẾN TRÚC 14 2.2.1 Kiến trúc phần mềm tổng quát 14 2.2.2 Nguy n lý thiết kế 15 2.3 CÁC KIỂU KIẾN TRÚC 16 2.3.1 Kiểu kiến trúc Client/Server 16 2.3.2 Kiểu kiến trúc dựa vào thành phần 18 2.3.3 Kiểu kiến trúc hướng miền 19 2.3.4 Kiểu kiến trúc phân tầng 20 2.3.5 Kiểu kiến trúc bus thông điệp 22 2.3.6 Kiểu kiến trúc N-tầng 23 2.3.7 Kiểu kiến trúc hướng đối tượng 24 2.3.8 Kiểu kiến trúc hướng dịch vụ 26 2.4 KẾT LUẬN 27 BÀI TẬP 27 CHƢƠNG 3: MƠ HÌNH HĨA KIẾN TRÚC 28 3.1 KHÁI NIỆM VỀ MƠ HÌNH KIẾN TRÚC 28 3.1.1 Y u cầu mơ hình hóa kiến trúc .28 3.1.2 Kiểu kiến trúc mơ hình hóa 29 3.1.3 Một số đặc trưng mơ hình hóa kiến trúc .30 3.1.4 Tính phức tạp mơ hình hóa 31 3.1.5 Tính chất khung nhìn 33 3.2 KỸ THUẬT MÔ HÌNH 34 3.2.1 Một số kỹ thuật mơ hình .34 3.2.2 Đánh giá kỹ thuật mơ hình 35 IT 3.3 MÔ HÌNH HĨA KIẾN TRÚC VỚI UML 35 3.3.1 Ngôn ngữ mô hình thống UML 35 3.3.2 Biểu diễn kiến trúc với UML 36 PT 3.3.3 Kiến trúc logic .38 3.3.4 Kiến trúc vật lý 41 3.4 KẾT LUẬN 42 BÀI TẬP 42 CHƢƠNG 4: KIẾN TRÚC PHẦN MỀM DỰA TRÊN THÀNH PHẦN 43 4.1 GIỚI THIỆU 43 4.1.1 Từ lập trình hướng đối tượng đến lập trình hướng thành phần 43 4.1.2 Khái niệm thành phần 45 4.2 PHÁT TRIỂN PHẦN MỀM DỰA TRÊN THÀNH PHẦN 46 4.2.1 Hướng dẫn thiết kế thành phần 46 4.2.2 Phân bố thành phần theo tầng 46 4.3 CƠ SỞ HẠ TẦNG CỦA PHÁT TRIỂN PHẦN MỀM HƢỚNG THÀNH PHẦN 49 4.4 BIỂU DIỄN KIẾN TRÚC VÀ THÀNH PHẦN VỚI UML 50 4.4.1 Mơ hình thành phần 50 4.4.2 Biểu đồ triển khai 51 4.5 KẾT LUẬN 52 BÀI TẬP 53 CHƢƠNG 5: MƠ HÌNH THÀNH PHẦN VỚI EJB 54 5.1 KIẾN TRÚC EJB 54 5.1.1 Tổng quan kíến trúc EJB J2EE platform 54 5.1.2 J2EE Server 54 5.1.3 Container 55 5.1.4 Thành phần EJB 56 5.2 MƠ HÌNH THÀNH PHẦN CỦA EJB 56 5.2.1 Tổng quan EJB 2.x 56 5.2.2 EJB 3.0 .57 5.2.3 Bean phiên 58 5.2.4 Thành phần dịch vụ EJB 59 5.2.5 Bean thực thể .60 5.2.6 Bean hướng thông điệp MDB (Message-Driven Beans) 68 5.3 MƠ HÌNH KẾT NỐI CỦA EJB 69 5.3.1 Kết hợp kết nối đồng 70 5.3.2 Kết nối lỏng lẻo không đồng 70 IT 5.3.3 Truyền thông từ xa cục .70 5.3.4 Các tham chiếu đối tượng đến bean thực thể 70 5.3.5 Kết hợp kết nối bean thực thể 70 PT 5.4 MƠ HÌNH TRIỂN KHAI EJB 72 5.5 CASE STUDY 74 5.5.1 Tạo giỏ hàng .74 5.5.2 Xây dựng Converter với Netbean .78 5.6 KẾT LUẬN 82 BÀI TẬP 82 CHƢƠNG 6: MƠ HÌNH THÀNH PHẦN NET 84 6.1 GIƠÍ THIỆU 84 6.1.1 Tổng quan NET framework 84 6.1.2 Cơ sở NET framework – CLR .85 6.1.3 Thư viện lớp NET .87 6.2 MƠ HÌNH THÀNH PHẦN CỦA NET 88 6.3 MƠ HÌNH KẾT NỐI 93 6.3.1 Thành phần kết nối NET 93 6.3.2 Kết nối thành phần Sự kiện (Event) Ủy nhiệm (Delegate) .94 6.3.3 Các kết nối từ xa cho thành phần phân tán NET 96 6.3.4 Gọi không đồng từ xa thành phần phân tán NET 99 6.4 MƠ HÌNH TRIỂN KHAI THÀNH PHẦN NET 100 6.4.1 Triển khai ri ng 101 6.4.2 Triển khai chia sẻ chung 101 6.5 KẾT LUẬN 104 BÀI TẬP 104 CHƢƠNG : KIẾN TRÚC VÀ MẪU THIẾT KẾ 105 7.1 KHÁI NIỆM MẪU THIẾT KẾ 105 7.2 ĐỊNH DẠNG MẪU THIẾT KẾ 106 7.3 PHÂN LOẠI MẪU THIẾT KẾ 107 7.4 SỬ DỤNG MẪU THIẾT KẾ 109 7.4.1 Khi sử dụng mẫu thiết kế? 109 7.4.2 Sử dụng mẫu thiết kế nào? 109 7.5 KẾT LUẬN 110 BÀI TẬP 111 IT CHƢƠNG 8: CÁC MẪU THIẾT KẾ TẠO DỰNG 112 8.1 MẪU THIẾT KẾ FACTORY METHOD 112 8.1.1 Đặt vấn đề 112 PT 8.1.2 Cấu trúc mẫu .112 8.1.3 Tình áp dụng 113 8.1.4 Ví dụ 114 8.2 MẪU THIẾT KẾ SINGLETON 116 8.2.1 Đặt vấn đề 116 8.2.2 Cấu trúc mẫu .116 8.2.3 Tình áp dụng 116 8.2.4 Ví dụ 116 8.3 MẪU THIẾT KẾ ABSTRACT FACTORY 119 8.3.1 Đặt vấn đề 119 8.3.2 Cấu trúc mẫu .119 8.3.3 Tình áp dụng 120 8.3.4 Ví dụ 120 8.4 MẪU THIẾT KẾ BUILDER 121 8.4.1 Đặt vấn đề 125 8.4.2 Cấu trúc mẫu .125 8.4.3 Tình áp dụng 126 8.4.4 Ví dụ 126 8.5 MẪU THIẾT KẾ PROTOTYPE 128 8.5.1 Đặt vấn đề 128 8.5.2 Cấu trúc mẫu .128 8.5.3 Tình áp dụng 128 8.5.4 Ví dụ 129 8.6 KẾT LUẬN 129 BÀI TẬP 129 CHƢƠNG 9: CÁC MẪU THIẾT KẾ CẤU TRÚC 130 9.1 MẪU ADAPTER 130 9.1.1 Đặt vấn đề 130 9.1.2 Cấu trúc mẫu .130 9.1.3 Tình áp dụng 131 9.1.4 Ví dụ 131 9.2 MẪU BRIDGE 131 IT 9.2.1 Đặt vấn đề 131 9.2.2 Cấu trúc mẫu .132 9.2.3 Tình áp dụng 132 PT 9.2.4 Ví dụ 133 9.3 MẪU COMPOSITE 135 9.3.1 Đặt vấn đề 135 9.3.2 Cấu trúc mẫu .135 9.3.3 Tình áp dụng 136 9.3.4 Ví dụ 136 9.4 MẪU DECORATOR 137 9.4.1 Đặt vấn đề 137 9.4.2 Cấu trúc mẫu .138 9.4.3 Tình áp dụng 138 9.5 MẪU FAÇADE 141 9.5.1 Đặt vấn đề 141 9.5.2 Cấu trúc mẫu .142 9.5.3 Tình áp dụng 142 9.5.4 Ví dụ 143 9.6 MẪU FLYWEIGHT 145 9.6.1 Đặt vấn đề 145 9.6.3 Tình áp dụng 146 9.6.4 Ví dụ 146 9.7 MẪU PROXY 148 9.7.1 Đặt vấn đề 148 9.7.2 Cấu trúc mẫu .148 9.7.3 Tình áp dụng 149 9.7.4 Ví dụ 149 9.8 KẾT LUẬN 151 BÀI TẬP 151 CHƢƠNG 10: CÁC MẪU THIẾT KẾ HÀNH VI 153 10.1 MẪU CHUỖI TRÁCH NHIỆM 154 10.1.1 Đặt vấn đề 154 10.1.2 Cấu trúc mẫu 154 10.1.3 Tình áp dụng .155 10.1.4 Ví dụ 155 IT 10.2 MẪU COMMAND 158 10.2.1 Đặt vấn đề 158 10.2.2 Cấu trúc mẫu 159 PT 10.2.3 Tình áp dụng .160 10.2.4 Ví dụ 160 10.3 MẪU ITERATOR 161 10.3.1 Đặt vấn đề 161 10.3.2 Cấu trúc mẫu 161 10.3.3 Tình áp dụng .162 10.3.4 Ví dụ 162 10.4 MẪU INTERPRETER 163 10.4.1 Đặt vấn đề 163 10.4.2 Cấu trúc mẫu 164 10.4.3 Tình áp dụng .164 10.4.4 Ví dụ 165 10.5 MẪU MEDIATOR 167 10.5.1 Đặt vấn đề 167 10.5.2 Cấu trúc mẫu 168 10.5.3 Tình áp dụng .168 10.6 MẪU MEMENTO 169 10.6.1 Đặt vấn đề 169 10.6.2 Cấu trúc mẫu 169 10.6.3 Tình áp dụng .169 10.7 MẪU OBSERVER 170 10.7.1 Đặt vấn đề 170 10.7.2 Cấu trúc mẫu 170 10.7.3 Tình áp dụng .171 10.8 MẪU STATE 171 10.8.1 Đặt vấn đề 171 10.8.2 Cấu trúc mẫu 171 10.8.3 Tình áp dụng .171 10.9 MẪU STRATEGY 172 10.9.1 Đặt vấn đề 172 10.9.2 Cấu trúc mẫu 172 10.9.3 Tình áp dụng .172 IT 10.10 MẪU TEMPLATE METHOD 172 10.10.1 Đặt vấn đề 172 10.10.3 Tình áp dụng .173 10.11 MẪU VISITOR 173 PT 10.11.1 Đặt vấn đề 173 10.11.2 Cấu trúc mẫu 174 10.11.3 Tình áp dụng .175 10.12 KẾT LUẬN 176 BÀI TẬP 176 CHƢƠNG 11: CASE STUDY 177 11.1 CASE STUDY 1: THIẾT KẾ CƠ CHẾ TRUY NHẬP DỮ LIỆU 177 11.1.1 Cấu trúc DAO 177 11.1.3 Hệ quản lý liệu khách hàng 179 11.2 CASE STUDY 2: HỆ QUẢN LÝ BÁN SÁCH TRỰC TUYẾN BOOKSTORE 184 TÀI LIỆU THAM KHẢO 198 LỜI GIỚI THIỆU LỜI GIỚI THIỆU Kiến trúc phần mềm xem trung tâm nghi n cứu phát triển hệ thống phần mềm cỡ lớn Quá trình phát triển xoay quanh khái niệm kiến trúc nhằm mục đích phát triển sản phẩm cách có hiệu quả, suất chất lượng cao Tài liệu dành cho sinh vi n năm cuối học môn kiến trúc thiết kế phần mềm Tài liệu xây dựng dựa tr n sở bạn đọc có kiến thức kỹ Phân tích thiết kế phần mềm, lập trình hướng đối tượng biểu diễn cấu trúc hành vi hệ thống với ngơn ngữ mơ hình UML Mục đích tài liệu nâng cao kiến thức kỹ thiết kế phần mềm cho sinh vi n ngành công nghệ thông tin Nội dung tập trung vào cách tiếp cận li n quan đến kiến trúc thiết kế phần mềm mẫu thiết kế Phần kiến trúc phần mềm chủ yếu trình bày cách tiếp cận dựa tr n thành phần công nghệ thành phần sử dụng rộng rãi công nghiệp phần mềm Phần mẫu thiết kế trình bày đầy đủ mẫu thông dụng nhằm cung cấp cho sinh vi n kiến thức kỹ áp dụng Nội dung tài liệu chia thành 11 Chương: Chƣơng 1: Khái niệm kiến trúc phần mềm IT Giới thiệu số khái niệm li n quan đến thiết kế kiến trúc tính phức tạp phần mềm Qua thấy lý kiến trúc phần mềm quan tâm đặc biệt việc phát triển hệ phần mềm cỡ lớn Đồng thời tập trung trình bày số khái niệm làm sở cho trình bày chương PT Chƣơng 2: Thiết kế kiến trúc kiểu kiến trúc Chương tập trung trình bày số chủ đề li n quan đến tiến trình thiết kế kiến trúc, nguy n ly thiết kế kiểu kiến trúc Chƣơng 3: Mơ hình hóa kiến trúc Chương nhằm trình bày số khái niệm sử dụng để thể kiến trúc từ thành phần đơn giản đến tính chất phức tạp hệ thống mơ hình hành vi Mơ hình kiến trúc biẻu diễn ngơn ngữ tự nhi n hay ngơn ngữ hình thức hạn chế ngữ nghĩa ngôn ngữ mô tả kiến trúc Rapide Biểu diễn kiến trúc với ngôn ngữ mơ hình hóa quen thuộc UML trình bày đầy đủ Chƣơng 4: Kiến trúc phần mềm dựa thành phần Nội dung chương tập trung trình bày mơ hình thành phần đặc trưng mơ hình để làm sở cho hai chương Mơ hình thành phần với UML tiếp tục trình bày với biểu đồ thành phần biểu đồ triển khai Chƣơng 5: Mơ hình thành phần với EJB Giới thiệu khung J2EE EJB, khái niệm thành phần EJB mơi trường runtime Nội dung trình bày kiểu cuả EJB, kết nối việc triển khai chúng, giới thiệu tính phiên EJB phân biệt lời gọi hàm đồng không đồng Nội dung đề cập hướng dẫn bước để xây dựng, triển khai sử dụng i LỜI GIỚI THIỆU thành phần EJB Chƣơng 6: Mơ hình thành phần NET Giới thiệu khung NET, khái niệm chung thành phần NET, kiểu thành phần NET, kết nối thành phần, cách triển khai chúng, thành phần cục phân tán, phân biệt thành phần kết nối hợp, gọi phương thức đồng khơng đồng Nội dung trình bày hướng dẫn bước để xây dựng, triển khai, sử dụng thành phần NET Chƣơng 7: Kiến trúc mẫu thiết kế Chương trình bày tổng quan khái niệm mẫu thiết kế, nhóm mẫu thiết kế đặc trưng mẫu thiết kế Một số vấn đề li n quan đến phân loại, tích hợp đề cập đến Chi tiết mô hình cài đặt mẫu thiết kế dành cho chương Chƣơng 8: Các mẫu thiết kế tạo dựng Chương tập trung trình bày mẫu thiết kế tạo dựng đề cập đến chương Trong mẫu thiết kế có bàn đến lý cho đời mẫu, biểu đồ lớp cho mẫu tình áp dụng cài đặt IT Chƣơng 9: Các mẫu thiết kế cấu trúc Chương tập trung trình bày mẫu thiết kế cấu trúc li n quan đến thiết kế cấu trúc lớp Trong mẫu thiết kế có bàn đến lý cho đời mẫu, biểu đồ lớp cho mẫu tình áp dụng cài đặt PT Chƣơng 10: Các mẫu thiết kế hành vi Chương tập trung trình bày mẫu thiết kế hành vi li n quan đến thiết kế thuật tốn Trong mẫu thiết kế có bàn đến lý cho đời mẫu, biểu đồ lớp cho mẫu tình áp dụng cài đặt Chƣơng 11: Case study Chương trình bày hai Case Study nhằm minh họa áp dụng số mẫu vào hai hệ khác Hệ quản lý Cơ sở liệu Hệ Quản lý bán sách trực tuyến BookStore Tài liệu đời dựa tr n đóng góp nhiều người Trước hết, tác giả xin bày tỏ lòng biết ơn đến tất Thầy-Cô Khoa CNTT Thầy-Cô Hội đồng thẩm định có nhiều góp ý xây dựng Đặc biệt cám ơn tác giả tài liệu trích dẫn tác giả mã nguồn sử dụng tài liệu Cám ơn bạn sinh viên chuyên ngành Công nghệ phần mềm qua nhiều hệ Học viện đóng góp cho tài liệu Tác giả xem tài liệu lắp ghép mẫu tài liệu có sẵn xếp theo quan điểm để giúp sinh vi n nhanh chóng dễ dàng tiếp cận mơn học Để hiểu cách sâu sắc đầy đủ chủ đề tài liệu, bạn đọc n n tham khảo tài liệu gốc liệt k tài liệu tham khảo chúng thực đáng để đọc Tác giả ii PT IT CHƢƠNG 11: CASE STUDY Hỡnh 11.9: Biu Faỗade cho Bookstore 185 CHƢƠNG 11: CASE STUDY MÃ NGUỒN package entity; import java.io.Serializable; import java.util.ArrayList; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; IT import javax.validation.constraints.Null; @Entity PT public class Book implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String name; private String author; private String state; private Boolean status; private Integer price; private String image; private int quanity; private String description; @OneToMany(mappedBy = "book", cascade= CascadeType.REMOVE) private List ArrayList(); booksObserver = new 186 CHƢƠNG 11: CASE STUDY @ManyToOne @JoinColumn(name = "category_id") private Category category; public void attach(BookObserver bo) { if (bo == null) { throw new NullPointerException("Null Observer"); } if (!booksObserver.contains(bo)) { booksObserver.add(bo); } } private boolean changes = false; return id; } IT public int getId() { public void setId(int id) { } PT this.id = id; @Override public int hashCode() { int hash = 0; hash += (int) id; return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Book)) { return false; 187 CHƢƠNG 11: CASE STUDY } Book other = (Book) object; if (this.id != other.id) { return false; } return true; } @Override public String toString() { return "entity.Book[ id=" + id + " ]"; } public String getName() { return name; } IT public void setName(String name) { this.name = name; } public String getAuthor() { } PT return author; public void setAuthor(String author) { this.author = author; } public List getBooksObserver() { return booksObserver; } public void setBooksObserver(List booksObserver) { this.booksObserver = booksObserver; } public String getState() { return state; } public void setState(String state) { if (this.state == null) { 188 CHƢƠNG 11: CASE STUDY this.state = state; } else if (!this.state.equals(state)) { this.changes = true; } this.state = state; notifyObservers(); } public void notifyObservers() { for (BookObserver observer : booksObserver) { observer.update(); } } public Boolean isStatus() { return status; IT } public void setStatus(Boolean status) { if (this.status != null) { changes = true; PT if (status == false) { setState("Het Hang"); } else { setState("Co Hang"); } System.out.println("ok"); } this.status = status; System.out.println("not ok"); } public Integer getPrice() { return price; } public void setPrice(Integer price) { if (this.price != null) { this.changes = true; 189 CHƢƠNG 11: CASE STUDY if (this.price < price) { setState("Tang gia " + (price - this.price)); } else if (this.price == price) { changes=false; } else { setState("Giam gia " + (this.price - price)); } } this.price = price; } public String getImage() { return image; } public void setImage(String image) { } IT this.image = image; public int getQuanity() { } PT return quanity; public void setQuanity(int quanity) { this.quanity = quanity; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; 190 CHƢƠNG 11: CASE STUDY } public boolean isChanges() { return changes; } public void setChange(boolean changes) { this.changes = changes; } } package entity; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; IT import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; @Entity public class BookObserver implements Observer,Serializable { PT @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String message; @ManyToOne @JoinColumn(name = "book_id") private Book book; public BookObserver(Book book) { this.book = book; this.book.attach(this); } public int getId() { return id; } public void setId(int id) { 191 CHƢƠNG 11: CASE STUDY this.id = id; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public BookObserver() { } @Override public void update() { if(book.isChanges()){ this.message = book.getState(); } @Override IT } public void setBook(Book book) { } PT this.book = book; public Book getBook() { return book; } } package entity; import entity.OrderDetail; import java.util.List; public class ShipMienBac extends Shipment{ @Override public int calculateShipmentPayment() { int gia = 0; for(OrderDetail ct : books){ gia +=ct.getQuanity()*5; 192 CHƢƠNG 11: CASE STUDY } return gia; } } package entity; import java.util.List; public class ShipMienTrung extends Shipment{ @Override public int calculateShipmentPayment() { int gia = 0; for(OrderDetail ct : books){ gia +=ct.getQuanity()*10; } } } package entity; PT import java.util.List; IT return gia; public class ShipMienNam extends Shipment{ @Override public int calculateShipmentPayment() { int gia = 0; for(OrderDetail ct : books){ gia +=ct.getQuanity()*15; } return gia; } } package entity; import entity.OrderDetail; import java.io.Serializable; import java.util.List; 193 CHƢƠNG 11: CASE STUDY import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; public abstract class Shipment { public Shipment() { } protected List books; public abstract int calculateShipmentPayment(); public List getBooks() { return books; } public void setBooks(List books) { this.books = books; } package session; import java.util.List; IT } PT import javax.persistence.EntityManager; public abstract class AbstractFacade { private Class entityClass; public AbstractFacade(Class entityClass) { this.entityClass = entityClass; } protected abstract EntityManager getEntityManager(); public void create(T entity) { getEntityManager().persist(entity); } public void edit(T entity) { getEntityManager().merge(entity); } public void remove(T entity) { 194 CHƢƠNG 11: CASE STUDY getEntityManager().remove(getEntityManager().merge(entity)); } } public T find(Object id) { return getEntityManager().find(entityClass, id); } public List findAll() { javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); cq.select(cq.from(entityClass)); return getEntityManager().createQuery(cq).getResultList(); } public List findRange(int[] range) { IT javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); cq.select(cq.from(entityClass)); javax.persistence.Query getEntityManager().createQuery(cq); q = PT q.setMaxResults(range[1] - range[0] + 1); q.setFirstResult(range[0]); return q.getResultList(); } public int count() { javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery(); javax.persistence.criteria.Root cq.from(entityClass); rt = cq.select(getEntityManager().getCriteriaBuilder().count(rt)); javax.persistence.Query getEntityManager().createQuery(cq); q = return ((Long) q.getSingleResult()).intValue(); }} package session; import entity.BookObserver; 195 CHƢƠNG 11: CASE STUDY import java.util.List; import javax.ejb.Local; @Local public interface BookObserverFacadeLocal { void create(BookObserver bookObserver); void edit(BookObserver bookObserver); void remove(BookObserver bookObserver); BookObserver find(Object id); List findAll(); List findRange(int[] range); int count(); } package session; import entity.BookObserver; IT import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @Stateless PT public class BookObserverFacade extends AbstractFacade implements BookObserverFacadeLocal { @PersistenceContext(unitName = "BookStorePU") private EntityManager em; @Override protected EntityManager getEntityManager() { return em; } public BookObserverFacade() { super(BookObserver.class); } } package session; import entity.OrderDetail; import javax.ejb.Stateless; import javax.persistence.EntityManager; 196 CHƢƠNG 11: CASE STUDY import javax.persistence.PersistenceContext; @Stateless public class OrderDetailFacade extends AbstractFacade implements OrderDetailFacadeLocal { @PersistenceContext(unitName = "BookStorePU") private EntityManager em; @Override protected EntityManager getEntityManager() { return em; } public OrderDetailFacade() { super(OrderDetail.class); } } PT IT Bạn đọc tự xây dựng Servlet trang JSP để thực thi chức hệ thống 197 TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO S T Albin, The Art of Software Architecture: Desing Methods and Techniques, John Wiley and Sons, 2003 [2] Nguyễn Văn Ba, Phát triển hệ thống hướng đối tượng với UML 2.0 C++, NXB Đại học Quốc gia Hà nội, 2005 [3] Bass L., Clements P., Kazman R., Software Architecture in Practice, AddisonWesley, 2013 [4] A Dennis B H Wixom and David Tegarden, System Analysis and Design with UML version 2.0: An Object-Oriented Approach, Second Edition, John Wiley & Sons 2005 [5] M K Debbarma et al., A Review and Analysis of Software Complexity Metrics in Structural Testing, International Journal of Computer and Communication Engineering, Vol 2, No 2, March 2013 Available at http://www.ijcce.org/papers/154-K271.pdf [6] Gregor Engels, Object-Oriented Modeling: A Roadmap, http://wwwcs.unipaderborn.de/cs/ag-engels/Papers/2000/EG00objectorientedModelling.pdf [7] Hans-Erit, Magnus Penker, Brian Lyons, David Faado, UML2 Toolkit, Wiley Publishing, Inc, 2004 [8] Microsoft, Microsoft application architecture guide, Second Edition, 2009 [9] E Gamma, R Helm, R Johnson, J Vlissides, Design patterns: Elements of Reusable Object Oriented Software, Addition Wesley, 1994 [10] Partha Kuchana, Software architecture design patterns in Java, Auerbach Publications, 2004 [11] Lin Liao, From Requirements to Architecture: The State of the Art in Software Architecture Design Availble at: http://www.liaolin.com//Courses/architecture02.pdf [12] Mike O’Docherty, Object-Oriented Analysis and Design: Understanding System Development with UML 2.0, John Wiley & Sons, 2005 [13] R Pressman, Software Engineering: A Practitioner’s Approach, McGraw-Hill, 2005 [14] Trần Đình Quế, Phân tích thiết kế Hệ thống thông tin, Bài giảng cho sinh vi n Học viện Cơng nghệ Bưu Viễn thơng, 2013 [15] S Schach, Object-oriented and classical software engineering, Eighth Edition, McGraw-Hill, 2011 [16] Brett Spell, Pro Java Programming, Second Edition, Apress 2006 PT IT [1] 198 TÀI LIỆU THAM KHẢO [17] Ashish Sharma and D.S Kushwaha, A Complexity measure based on Requirement Engineering Document, Journal of computer science and engineering, Vol.1, Issue 1, May 2010 Available at http://arxiv.org/ftp/arxiv/papers/1006/1006.2840.pdf [18] R Taylor, N Medvidovic and E Dashofy, Software Architecture: Foundations, Theory and Practice, Wiley Publisher, 2010 [19] David P Tegarden et al., A Software Complexity Model of Object-Oriented Systems, 1992 Available at http://www.acis.pamplin.vt.edu/faculty/tegarden/wrkpap/DSS.PDF [20] Joseph S Valacich, Joey F George, Jeffrey A Hoffer, Essentials of systems analysis and design, Fifth Edition, Pub Pearson, 2011 [21] A J A Wang and K Qian Component Oriented Programming, Wiley, 2005 [22] Java Pattern: http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html IT Java Pattern Tutorial: https://www.tutorialspoint.com/design_pattern/index.htm PT [23] 199 ... cao kiến thức kỹ thiết kế phần mềm cho sinh vi n ngành công nghệ thông tin Nội dung tập trung vào cách tiếp cận li n quan đến kiến trúc thiết kế phần mềm mẫu thiết kế Phần kiến trúc phần mềm. .. giá thiết kế Đánh giá kiến trúc đánh giá sản phẩm phần mềm mà đánh giá mơ tả mặt thiết kế kiến trúc hệ thống Đánh giá kiến trúc nhằm đo chất lượng thiết kế sau 13 CHƢƠNG 2: THIẾT KẾ KIẾN TRÚC VÀ... hành 14 IT CHƢƠNG 2: THIẾT KẾ KIẾN TRÚC VÀ CÁC KIỂU KIẾN TRÚC PT Hình 2.1: Kiến trúc hệ phần mềm tổng quát [8] Chương xem xét thao tác thiết kế tổng quát thiết kế kiến trúc phần mềm cách sử dụng