Skip to content

danghieu1407/DesignPatternFinalProject

Repository files navigation

TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM

TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG

KHOA CÔNG NGHỆ THÔNG TIN

image


TIỂU LUẬN GIỮA KÌ MÔN DESIGN PATTERN

TÌM HIỂU VỀ PATTERNS





Người hướng dẫn : Thầy ĐẶNG HUỲNH TRUNG TÍN

Người thực hiện : NGUYỄN ĐẶNG HIẾU – 51900073

GIANG VINH DIỄN – 51900035

ĐẶNG PHÚC HUY – 51900087

TRẦN GIA HUY - 51900685

Lớp : 19050201

19050202

19050281

Khoá : 23

THÀNH PHỐ HỒ CHÍ MINH, NĂM 2022


LỜI CẢM ƠN

Đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến Thầy Đặng Huỳnh Trung Tín. Thầy là người hỗ trợ và hướng dẫn tận tình cho chúng em trong quá trình nghiên cứu, tìm hiểu để hoàn thành bài tiểu luận giữa kỳ môn Design Pattern. Tiếp theo, chúng em xin gửi lời cảm ơn đến khoa Công Nghệ Thông Tin trường Đại học Tôn Đức Thắng vì đã tạo điều kiện cho chúng em được học tập và nghiên cứu môn học này. Khoa đã luôn sẵn sàng chia sẻ các kiến thức bổ ích cũng như kinh nghiệm tham khảo tài liệu, giúp ích không chỉ cho việc thực hiện và hoàn thành đề tài nghiên cứu mà còn giúp ích cho việc học tập và rèn luyện trong quá trình thực hành tại trường Đại học Tôn Đức Thắng nói chung. Cuối cùng, trong quá tình hoàn tất đề tài của mình nhờ vào sự hướng dẫn, giúp đỡ và những kiến thức học hỏi được từ Quý thầy cô. Do giới hạn về mặt kiến thức và khả năng lý luận nên chúng em còn nhiều thiếu sót, kính mong sự chỉ dẫn và đóng góp của Quý thầy cô giáo để bài nghiên cứu của chúng em được hoàn thiện hơn. Hơn nữa, nhờ những góp ý từ thầy cô và bạn bè, chúng em sẽ hoàn thành tốt hơn ở các bài nghiên cứu khác sau này. Chúng em mong Quý thầy cô và bạn bè sẽ luôn quan tâm và hỗ trợ chúng em và chúc Quý thầy cô và các bạn luôn tràn đầy sức khỏe. CHÚNG EM XIN CHÂN THÀNH CẢM ƠN!. 

MỤC LỤC

DANH MỤC HÌNH

Giới thiệu về ứng dụng

"Bá cháy" là thương hiệu trà sữa có nguồn gốc thương hiệu tại Việt Nam. Nguyên vật liệu được kiểm duyệt và nhập khẩu từ Singapore và Đài Loan. Là thương hiệu đại diện cho sản phẩm chất lượng và giá thành hợp lí. Cửa hàng "Bá cháy" đầu tiên ra đời vào năm 2012, mang phong cách loại hình takeaway - trà sữa mang đi, mô hình được ưa chuộng nhất lúc đó. Năm 2013 chính thức thành lập công ty CP TMDV Chào Ngày Mới và đến 2017 công ty nhận vốn góp từ công ty TNHH DIOS Investment Vina - một quỹ đầu tư trực tiếp vốn 100% từ Hàn Quốc. Trước đó bằng hình thức chuyển nhượng thương hiệu, "Bá cháy" đã thành công với iệc sỡ hữu 33 cửa hàng trên toàn quốc chủ yếu ở các thành phố lớn như TP. Hồ Chí inh, Đà Nẵng, Hà Nội. Sau khi kết hợp cùng công ty DIOS, "Bá cháy" chính thức mở rộng thêm 11 cửa hàng ở các tỉnh thành: Quảng Ninh, Bình Dương, Vũng Tàu..Với châm ngôn tuyệt đối không sử dụng nguyên liệu không rõ nguồn gốc xuất xứ, trà sữa "Bá cháy" tự hào mang lại cho khách hàng những sản phẩm chất lượng nhất. "Bá cháy" luôn cảm kích về sự tin dùng và dễ thương của quý khách hàng. Một trong những điều làm nên thương hiệu của "Bá cháy" là việc order có thể diễn ra một cách trực tuyến ,nhanh gọn, an toàn và tiện lợi nhờ vào app quản lý đặt đồ ăn nhanh do đội ngũ dev gồm 4 thành viên phát triển.

Vấn đề đặt ra khi không áp dụng Design Pattern vào ứng dụng

Singleton Pattern

Nếu khởi tạo nhiều hơn một đối tượng thì sẽ gặp phải một số vấn đề như hành vi chương trình không chính xác, lạm dụng tài nguyên hoặc kết quả không nhất quán.

Decorator Pattern

Khi phát triển phần mềm việc thêm hành vi (method) cho object thường xảy ra. Để giải quyết vấn đề này ta có thể bổ sung hành vi cho object bằng cách thêm method vào class hoặc tạo 1 sub class có thêm method. Bổ sung method cho class thì chúng ta cần kiểm thử lại code cho cả class. Hơn nữa cách kế thừa cũng có nhược điểm là nó chỉ thêm hành vi tĩnh chứ không giúp object có để sử dụng hành vi mới trong quá trình chạy

MVC Pattern

Pattern này giúp tách phần view ra khỏi model và controller. Điều này có nghĩa là khi chúng ta muốn sửa đổi thuật toán thì nó sẽ không ảnh hưởng đến những phần không liên quan. Nếu không sử dụng pattern này, thì việc sắp xếp và sửa đổi các thuật toán sẽ ảnh hưởng đến các phần không liên quan.

Command Pattern

Trong bài này, command pattern giúp việc bật tắt các nút trong form trở nên gọn gàng hơn vì nó gom các nút có cùng tác vụ lại thành 1 nút. Nếu không sử dụng pattern này, code sẽ bị tràn lan và lặp lại như nhau ở mỗi khi chúng ta gọi 1 nút

Template Method Pattern

Pattern này giúp việc code trở nên dễ dàng hơn và tránh trùng lặp. Cụ thể là các thao tác chung của các lớp con sẽ đc gom lại ở lớp cha và khi chúng muốn gọi hàm ra thì hàm sẽ được hiện thực bên trong lớp con đó. Khi muốn bảo trì hay sửa chữa hàm của lớp con nào thì ta sửa trong hàm đó. Tránh trường hợp ảnh hưởng đến các hàm khác

Yêu cầu thư viện, tool hỗ trợ, database

  • Thư viện sử dụng: Microsoft.VisualStudio.Services.Client(16.170.0), System.Data.SqlClient(4.8.3)
  • IDE: Visual Studio, Microsoft SQL Server Management Studio
  • Database: SQL

Cách khởi chạy

  • Clone project từ link: Github bằng cách mở cmd và nhập lệnh git clone https://github.com/danghieu1407/DesignPatternDemo.git về máy của bạn.

  • Mở folder DesignPatternDemo, double click vào file DesignPatternMidterm.sln và chọn mở bằng Visual Studio để mở project.

  • Đăng nhập vào SQL Server bằng chế độ SQL Server Authentication và import database từ file DemoDatabase.sql vào SQL Server.

  • Truy cập vào Visual Studio chọn Server Explorer và click chuột phải vào Data Connections chọn Add Connection. Ở mục Log on to the server chọn SQL Server Authentication, nhập vào các thông tin sau: User name ,Password và nhập tên server ở mục Server Name, chọn tên database là DemoDatabase ở mục Select or enter a database name. SQLConnect

  • Ở phần Properties, chọn và copy Connection String. ConnecttionString

  • Đổi Connection String ở file ./ConfigurationDTB/DatabaseProvide.cs dòng số 13.

  • Nhấn F5 để chạy project.

Các kiến thức về patterns và lý do ứng dụng patterns

Các kiến thức về patterns

  • Singleton Pattern: Là một trong những design pattern thuộc nhóm khởi tạo – Creational Patterns. Singleton thường được sử dụng khi chúng ta mong muốn chỉ có một đối tượng tồn tại duy nhất và có thể truy cập ở mọi lúc. Singleton đảm bảo rằng 1 class chỉ có 1 instance duy nhất tồn tại ở bất kỳ thời điểm nào class đó được request.
  • Decorator Pattern: Là một trong những Pattern thuộc nhóm cấu trúc (Structural Pattern). Nó cho phép người dùng thêm chức năng mới vào đối tượng hiện tại mà không muốn ảnh hưởng đến các đối tượng khác. Kiểu thiết kế này có cấu trúc hoạt động như một lớp bao bọc (wrap) cho lớp hiện có.
  • MVC Pattern: MVC Design Pattern được dịch ra là các mẫu thiết kế mô hình MVC trong công nghệ phần mềm. Một mẫu thiết kế chính là một giải pháp lặp lại chung cho các vấn đề thường xảy ra trong thiết kế phần mềm khác. Nhiều mẫu thiết kế sẽ là nhiều giải pháp cho các vấn đề chung mà nhà thiết kế phải đối mặt trong quá trình phát triển phần mềm. Tất cả những giải pháp này có được là nhờ việc thử nghiệm và lỗi từ các nhà phát triển phần mềm khác.
  • Command Pattern: Là một trong 23 design pattern Gang of Four nổi tiếng. Command pattern thuộc nhóm các pattern hành vi: Đóng gói tất cả thông tin cần thiết vào 1 đối tượng để thực hiện hành động hay kích hoạt một sự kiện thực hiện sau đó. Các thông tin có thể bao gồm tên phương thức, các biến và giá trị cần thiết...hay đơn giản hơn đó là nó cho phép chuyển yêu cầu thành đối tượng độc lập, có thể được sử dụng để tham số hóa các đối tượng với các yêu cầu khác nhau như log, queue (undo/redo), transtraction.
  • Template Method Pattern: Là một trong những Pattern thuộc nhóm hành vi (Behavior Pattern). Pattern này nói rằng “Định nghĩa một bộ khung của một thuật toán trong một chức năng, chuyển giao việc thực hiện nó cho các lớp con.

Lý do ứng dụng patterns

  • Singleton Pattern: Khi sử dụng thì không nên để quá nhiều chức năng, cũng như tạo quá nhiều thực thể kết nối. Do đó Singleton Pattern áp dụng vào đây thì hợp lí, tất cả chức năng nên sử dụng chung một thực thể kết nối.
  • Decorator Pattern: Decorator Pattern phù hợp với các việc có sự thay đổi, ở đây sự thay đổi là khi thêm Phần thêm hoặc Topping(tuỳ theo sở thích mà khách hàng lựa chọn có hoặc không, hay có thể là cửa hàng có thêm Phần thêm hoặc Topping khác) dù có thay đổi thì cũng không gây ảnh hưởng đến các lớp cũ .Trong bài, Decorator dùng để bổ sung một số thức ăn là Phần thêm, Topping cho món ăn hoặc thức uống. Ở đây, thực đơn chia làm 6 món, trong đó có 3 món được áp dụng Decorator vào đó là Gà rán và Trà sữa. Decorator được dụng để thêm các Topping cho món ăn hoặc thức uống(món ăn là Gà rán, thức uống là Trà sữa).
  • MVC Pattern: Áp dụng MVC (Model - View - Controller) để dễ dàng thao tác dữ liệu giữa Frontend và Backend, dễ dàng hơn trong việc kiểm tra, phát hiện lỗi để đảm bảo chất lượng phần mềm có kết quả cao hơn.
  • Command Pattern: Dùng để quản lý các nút chọn món ở trong phần đặt món. Command Pattern trong bài này có nhiệm vụ làm cho một số nút cùng Enable, Disable, đổi về cùng một màu, ẩn nút và hiện nút. Điều này giúp cho viêc lập trình bớt phức tạp và không còn bị thiếu hoặc thừa câu lệnh về nút (ví dụ như quên Enable nút hoặc Disable nhầm nút).
  • Template Method Pattern: Template Method Pattern là một quá trình bao gồm các bước theo thứ tự không thay đổi, và cũng có những bước thường xuyên thay đổi tuỳ vào nhu cầu. Do đó ở đây dùng để nêu ra một số phương thức chung dùng để chế biến các món ăn và việc thực hiện cụ thể các món ăn đó được nêu rõ ở mỗi món nêu cụ thể.

Chi tiết thông tin ứng dụng pattern kèm theo class diagram

Chi tiết thông tin ứng dụng

Ứng dụng đặt đồ ăn "BÁ CHÁY" gồm cái 3 tác nhân chính là người dùng, nhân viên và admin

  • Người dùng: Có thể đăng nhập, đăng ký, quên mật khẩu và order món ăn.
  • Nhân viên: Có các chức năng của người dùng và có thể chế biến món ăn.
  • Admin: Có tất cả chức năng của người dùng và nhân viên và có thêm chức năng quản lý tài khoản (CURD tài khoản). Account dùng trong ứng dụng.
  • Account Admin: Email: PH123@gmail.com - Password: 123456
  • Account Staff: Email: GD123@gmail.com - Password: GD1234
  • Account Customer: Email: DH123@gmail.com - Password: DH1234
  • Account Customer: Email: GH123@gmail.com - Password: GH1234

Usecase Diagram

UseCase

Class Diagram

Class Diagram toàn hệ thống

dp drawio

Class Diagram Singleton Pattern

image

Class Diagram Decorator Pattern

image

Class Diagram MVC Pattern

image

Class Diagram Command Pattern

image

Class Diagram Template Method Pattern

image

Kết quả triển khai thực tế

Trang đăng nhập ứng dụng

Người dùng nhập username và password để đăng nhập vào hệ thống, họ cũng có thể chọn nhớ tài khoản cho lần đăng nhập tiếp theo mà không cần nhập lại tài khoản. Nếu người dùng quên mật khẩu thì có thể chọn nút quên mật khẩu và nhập thông tin cần thiết để lấy lại mất khẩu. LoginScreen

Trang đăng ký ứng dụng

Người dùng nhập các thông tin cần thiết để đăng ký tài khoản nhằm mục đích sử dụng hệ thống. Register

Trang chủ ứng dụng

Hiển thị các chức năng mà hệ thống có như Đặt món, Quản lí tài khoản, Khu bếp.

Với role Admin

MainScreenAdmin

Với role Staff

MainScreenStaff

Với role Customer

MainScreenCustomer

Giao diện đặt món ăn

Sau khi chọn chức năng Đặt món sẽ có giao diện như hình trên, tại đây có thể chọn các thức ăn hoặc thức uống có trên màn hình, có thể chọn thêm Phần thêm hoặc Topping. Có thể nhập số lượng món ăn cần mua, hiển thị tống giá tiền cần phải thanh toán. OrderScreen

Say khi chọn món ấn đặt hàng. Hệ thống sẽ hiện lên số tiền bạn cần thanh toàn và yêu cầu bạn chuẩn bị đầy đủ số tiền để trả cho shipper. OrderScreenComplete

Giao diện chế biến món ăn ở Khu bếp

Khi chọn Khu bếp sẽ hiển thị giao diện chọn các món ăn chế biến. Khi chọn vào món ăn thì sẽ hiển thị cách thức thực hiện món ăn đó. KitchenScreen

Sau khi chọn món ăn cần chế biến và nhấn chế biến. Hệ thống sẽ tiến hành chế biến món ăn. KitchenScreenSuccess

Giao diện quản lý tài khoản

Đây là giao diện quản lý tài khoản cho admin. Tại đây admin có thể có các thao tác như Thêm account mới, Sửa thông tin account, xóa account. ManageAccount

Testcase về những tính năng áp dụng pattern

Tính năng order

Code Module1
Test requirement Brief description about requirements which are tested in this table
Tester
Passed Failed Untested Blocked Skipped Number of Test cases
2 1 0 0 0 3
ID Test Case Description Test Case Procedure Expected Output Inter-test case Dependence Result Test date Note
[Module1-1] Khi chưa chọn món không bấm được nút hủy đơn 1) Đăng nhập hệ thống 2) Chọn "Đặt món" 3) Bấm nút "Hủy đơn" Không ấn được Passed
[Module1-2] Chọn 1 món 2 lần thì tự tăng số lượng 1) Đăng nhập hệ thống 2) Chọn "Đặt món" 3) Bấm nút "thêm" 4) Lập lại bước 3 1 lần nữa Tăng số lượng Failed
[Module1-3] Disabled các button khác khi đang chọn 1 món 1) Đăng nhập hệ thống 2) Chọn "Đặt món" 3) Chọn 1 món Disable các button khác Passed

Tính năng chế biến món

Code Module2
Test requirement Brief description about requirements which are tested in this table
Tester
Passed Failed Untested Blocked Skipped Number of Test cases
2 0 0 0 0 2
ID Test Case Description Test Case Procedure Expected Output Inter-test case Dependence Result Test date Note
[Module2-1] Khi chưa chọn món cần chế biến thì sẽ không hiện nút "Chế biến" 1) Đăng nhập hệ thống 2) Chọn "Khu bếp" Không hiện nút "Chế biến" Passed
[Module2-2] Chọn 1 món thì sẽ không chọn được món khác 1) Đăng nhập hệ thống 2) Chọn "Khu bếp" 3) Chọn 1 món bất kì Không chọn được món khác Passed

Phân công công việc

STT Họ và Tên MSSV CÔNG VIỆC MỨC ĐỘ HOÀN THÀNH
1 Đặng Phúc Huy 51900087 Tạo menu và áp dụng Decorator Pattern cho gà rán và trà sữa, viết README.md 100%
2 Giang Vinh Diễn 51900035 Command Pattern các nút món ăn, viết README.md 100%
3 Nguyễn Đặng Hiếu 51900073 MVC Pattern & Singleton Pattern, viết README.md 100%
4 Trần Gia Huy 51900685 Template Method pattern trong nhà bếp, viết README.md 100%

Video demo

https://youtu.be/ZTJHH8LiBMg

Tài liệu tham khảo

Tiếng việt:

1. https://toihocdesignpattern.com/
2. https://viblo.asia/p/cach-viet-readme-chat-LzD5dr9EZjY

Tiếng anh

1. https://www.tutorialspoint.com/design_pattern

Thông tin người phát triển

  • Nguyễn Đặng Hiếu - 51900073
  • Giang Vinh Diễn - 51900035
  • Đặng Phúc Huy - 51900087
  • Trần Gia Huy - 51900685

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published