Tải bản đầy đủ (.pdf) (39 trang)

Báo cáo thực tập lập trình trang web với asp net, react js và graphql

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.23 MB, 39 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM

BÁO CÁO THỰC TẬP

LẬP TRÌNH TRANG WEB VỚI ASP. NET, REACT.JS
VÀ GRAPHQL

Cơng ty thực tập
KMS Technology
Người phụ trách
Võ Hồng Việt

Thực tập sinh
Đỗ Phi Long

TP. Hồ Chí Minh, tháng 12 năm 2022

Võ Hoàng Việt

Đỗ Phi Long


LỜI MỞ ĐẦU

Ngày nay, các trang web phát triển cực kỳ mạnh mẽ, khơng cịn là các trang web tĩnh
chứa thơng tin, văn bản như trước mà thay vào đó là rất nhiều tính năng độc đáo và hữu ích
được gói gọn trong nhiều thuật ngữ như web app, web service,… Nhờ sự thuận tiện và độc lập
với phần cứng của người dùng cuối, các trang web dần trở thành tiện ích khơng thể thiếu trong
đời sống con người ở thời đại 4.0 hiện nay. Đồng thời, nhiều công nghệ dùng để phát triển web
liên tục được cho ra mắt với tốc độ chóng mặt, song song với các thử thách phát sinh từ nhu cầu


người dùng và bảo mật thơng tin.
Để tạo ra một trang web có nhiều lượt sử dụng, đem đến sự tiện lợi và hữu ích cho người
dùng khơng cịn là một việc đơn giản. Có vô số vấn đề phát sinh và các thách thức liên tục được
đặt ra, cũng như vô số các công nghệ, thư viện, framework được tạo nên để giải quyết các thách
thức đó. Khối lượng kiến thức cần tiếp thu với một nhà phát triển web ngày càng dồi dào và sâu
rộng. Tuy nhiên, đây cũng là cơ hội để tiếp cận người dùng bằng các sản phẩm web được thiết
kế và xây dựng tốt, tỉ mỉ, đem lại nhiều ích lợi cho người sử dụng.
Vì các lý do trên nên sau 3 năm học tập và rèn luyện tại Trường, em muốn tham gia vào
một doanh nghiệp chuyên về lĩnh vực phát triển ứng dụng web, có đội ngũ kỹ sư nhiều kinh
nghiệm, với mong muốn được học hỏi các kiến thức và kinh nghiệm - đồng thời là cơ hội để
trau dồi kỹ năng và nhận ý kiến đóng góp - của những người đi trước trong lĩnh vực phát triển
web.

Võ Hoàng Việt

Đỗ Phi Long


LỜI CẢM ƠN

Trân trọng gửi lời cảm ơn KMS Technology Việt Nam đã tạo điều kiện cho em có cơ hội
được thực tập tại công ty.
Chỉ trong một thời gian ngắn, nhưng nhờ sự chỉ dẫn nhiệt tình của các mentor, em đã học
được nhiều kiến thức và kinh nghiệm trong lĩnh vực phát triển web. Chân thành cảm ơn các anh
trong team Clearwave đã bỏ ra nhiều thời gian, cơng sức để hướng dẫn em hồn thành đợt thực
tập này.
Đặc biệt cảm ơn anh Võ Hoàng Việt đã dẫn dắt em và nhiệt tình chia sẻ với em khơng
chỉ về kiến thức chun mơn mà cịn về các quy trình làm việc, các kinh nghiệm trong ngành và
văn hóa ở cơng ty. Các ý kiến đóng góp và lời khuyên của anh Việt về các công việc mà em
thực hiện là những đóng góp đáng trân trọng giúp em tiếp tục phát triển về kiến thức, kỹ năng,

lẫn thái độ.
Cũng xin cảm ơn thầy cô trong khoa Công nghệ phần mềm đã nhiệt tình hỗ trợ, tạo điều
kiện em làm bài báo cáo này.
Đỗ Phi Long
TP.HCM, ngày 25 tháng 12 năm 2022

Võ Hoàng Việt

Đỗ Phi Long


NHẬN XÉT CỦA KHOA

..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................
..........................................................................................................................................................

..........................................................................................................................................................

Võ Hoàng Việt

Đỗ Phi Long


MỤC LỤC
Chương 1: Giới thiệu công ty thực tập .......................................................................................... 1
1. Giới thiệu công ty KMS Technology .................................................................................. 1
1.1. Về KMS Healthcare ..................................................................................................... 1
1.2. Về KMS Solutions ........................................................................................................ 2
2. Sản phẩm của công ty ......................................................................................................... 2
Chương 2: Nội dung thực tập......................................................................................................... 4
1. Tìm hiểu cơng ty và các kỹ năng cơ bản trong công ty ...................................................... 4
2. Nghiên cứu kỹ thuật ............................................................................................................ 5
2.1. Tìm hiểu các tính năng nâng cao của C#...................................................................... 5
2.2. Tìm hiểu sâu về OOP ................................................................................................... 7
2.3. Tìm hiểu về Entity Framework Core ............................................................................ 8
2.4. Tìm hiểu về ASP .NET Core MVC và làm trang web demo ..................................... 11
2.5. Tìm hiểu về ASP .NET Core Web API ...................................................................... 13
2.6. Tìm hiểu về React ....................................................................................................... 15
2.7. Tìm hiểu về TDD........................................................................................................ 16
2.8. Tìm hiểu về GraphQL ................................................................................................ 18
3. Thực hiện project .............................................................................................................. 21
4. Lịch làm việc ..................................................................................................................... 21
Chương 3: Chi tiết về project ....................................................................................................... 27
1. Giới thiệu về Planning Poker ............................................................................................ 27
2. Thực hiện .......................................................................................................................... 30
3. Kế hoạch ........................................................................................................................... 30


Võ Hoàng Việt

Đỗ Phi Long


DANH MỤC HÌNH ẢNH

Hình 1.1 Logo KMS Technology .................................................................................................. 1
Hình 1.2 Logo KMS Healthcare .................................................................................................... 1
Hình 1.3 Logo KMS Solution ........................................................................................................ 2
Hình 1.4 Kobiton logo ................................................................................................................... 3
Hình 1.5 Katalon logo .................................................................................................................... 3
Hình 1.6 Grove logo ...................................................................................................................... 3
Hình 1.7 Visily logo ....................................................................................................................... 3
Hình 1.8 Kaypay logo .................................................................................................................... 3
Hình 2.1 Kế hoạch học tập và làm việc của kỳ thực tập................................................................ 5
Hình 2.2 Target-typed new expression .......................................................................................... 6
Hình 2.3 Các entity class trong EF Core ....................................................................................... 9
Hình 2.4 Đọc dữ liệu thỏa điều kiện vào một collection entity ................................................... 10
Hình 2.5 Mơ hình MVC ............................................................................................................... 12
Hình 2.6 Chu kỳ thực hiện của TDD ........................................................................................... 17
Hình 2.7 Mơ hình hoạt động của GraphQL ................................................................................. 19
Hình 3.1 Giao diện chính của Planning poker ............................................................................. 28
Hình 3.1 Q trình chơi planning poker ...................................................................................... 29

Võ Hồng Việt

Đỗ Phi Long



1

Chương 1: Giới thiệu cơng ty thực tập

Hình 1.1 Logo KMS Technology

1. Giới thiệu công ty KMS Technology
Được thành lập vào năm 2009, KMS Technology là công ty chuyên cung cấp các
dịch vụ phát triển sản phẩm phần mềm, tư vấn triển khai các giải pháp công nghệ và khởi
nghiệp. Sau hơn 12 năm hoạt động KMS đã xây dựng đội ngũ hơn 1000 nhân viên tại
Mỹ và Việt Nam, và phát hành 6 sản phẩm phần mềm trên thị trường thế giới.
KMS bao gồm:
• KMS Healthcare
• KMS Solutions
• Các công ty product
1.1.

Về KMS Healthcare
KMS Healthcare được thành lập để phát triển các giải pháp phần mềm phục vụ
cho ngành y tế, chăm sóc sức khỏe.

Hình 1.2 Logo KMS Healthcare

Võ Hoàng Việt

Đỗ Phi Long


2

Các dịch vụ được cung cấp bởi KMS Healthcare tuân thủ theo các quy định về y
tế như HIPAA, ACA (Obamacare), FHIR,… Chúng bao gồm:
• Phát triển phần mềm, ứng dụng y tế trên nhiều nền tảng
• Kiểm thử phần mềm
• Tư vấn giải pháp phần mềm
• Phân tích dữ liệu y tế
1.2.

Về KMS Solutions
KMS Solutions tập trung vào các giải pháp phần mềm về tài chính và ngân hàng,
phục vụ thị trường trong khu vực Châu Á-Thái Bình Dương.

Hình 1.3 Logo KMS Solution
Các dịch vụ được cung cấp bởi KMS Solutions bao gồm:
• Tư vấn giải pháp phần mềm cho kinh doanh
• Phát triển phần mềm ngân hàng
• Phân tích dữ liệu
• Kiểm thử phần mềm

2. Sản phẩm của cơng ty
Trong q trình phát triển của cơng ty, KMS đã triển khai thành công nhiều sản
phẩm, phần lớn trong số đó chỉ được lưu hành và sử dụng trong nội bộ của đối tác khách
hàng. Một số sản phẩm được cơng bố rộng rãi bao gồm:
• Kobiton: Hệ thống kiểm thử các phần mềm di động, cung cấp tính năng kiểm thử
tự động hay thủ công trên các thiết bị di động thật và không sử dụng giả lập.

Võ Hoàng Việt

Đỗ Phi Long



3

Hình 1.4 Kobiton logo
• Katalon: Một hệ thống kiểm thử sử dụng công nghệ AI giúp tạo các test case một
cách nhanh chóng và dễ dàng cho các trang web và mobile.

Hình 1.5 Katalon logo
• Grove: Hệ thống quản lý thơng tin nhân sự một cách nhanh chóng và thuận tiện
cho cả nhân viên và cơng ty.

Hình 1.6 Grove logo
• Visily: Trang web thiết kế UI được tạo ra cho những người khơng phải là designer
áp dụng cơng nghệ AI.

Hình 1.7 Visily logo
• Kaypay: Hệ thống thanh tốn một cách đơn giản và thuận tiện.

Hình 1.8 Kaypay logo

Võ Hồng Việt

Đỗ Phi Long


4

Chương 2: Nội dung thực tập
Đợt thực tập tại KMS Technology đã cho em thấy quá trình làm việc và phát triển phần
mềm ở môi trường chuyên nghiệp, bên cạnh việc giúp em học được thêm nhiều kiến thức về

phát triển ứng dụng web. Ngoải ra, em cũng có cơ hội cải thiện các kỹ năng mềm như giao
tiếp và thuyết trình.
Quá trình thực tập bắt đầu bằng việc củng cố, trau dồi kiến thức cho các thực tập sinh về
các chủ đề và công nghệ phổ biến, đây là quá trình tự học kết hợp với trao đổi cùng người
phụ trách (mentor) và các thành viên trong team.
Sau đó, thực tập sinh sẽ được giới thiệu với một project đang được phát triển, để thực
hiện trong suốt khoảng thời gian còn lại của kỳ thực tập. Thực tập sinh sẽ dành một khoảng
thời gian để đọc mã nguồn của project và tìm hiểu về các kiến thức, cơng nghệ được sử dụng
trong project. Sau khi đã hiểu mã nguồn và các công nghệ được sử dụng, thực tập sinh sẽ
chọn các ticket còn mở để thực hiện.
Các ticket em chọn trong q trình thực hiện project là các tính năng tích hợp với đám
mây, và refactor mã nguồn.

1. Tìm hiểu công ty và các kỹ năng cơ bản trong cơng ty
Thời gian : 1 ngày
Nội dung :
• Nhận thẻ nhân viên
• Nhận thiết bị cần sử dụng trong cơng việc như laptop, headset, thiết lập tài khoản
nhân viên
• Tham gia buổi hướng dẫn nhân viên mới: giới thiệu về công ty, cơ cấu tổ chức,
phổ biến quy định và nội quy, giới thiệu các công cụ làm việc và liên lạc, quy
trình và thơng tin liên lạc khi cần giúp đỡ.
• Hồn tất các thủ tục giấy tờ và hợp đồng
• Gặp và giới thiệu với team kỹ sư
• Gặp và trao đổi với mentor về định hướng trong tương lai, kế hoạch trong kỳ thực
tập và lên kế hoạch cho các task tìm hiểu đầu tiên

Võ Hồng Việt

Đỗ Phi Long



5

2. Nghiên cứu kỹ thuật
Tuần 1

Tuần 2

Tuần 3

Tuần 4

MVC

Web API

C#
OOP

EF Core

Tuần 5
Tuần 6
React

Tuần 7
TDD

Tuần 8

GraphQL

Tuần 9

Tuần 10 Tuần 11
Project

Tuần 12

Hình 2.1 Kế hoạch học tập và làm việc của kỳ thực tập
2.1.

Tìm hiểu các tính năng nâng cao của C#

Thời gian: 4 tuần
Nội dung: Tìm hiểu các tính năng mới trong các phiên bản gần đây của C#. Ngoài ra,
trong quá trình thực hiện các task liên quan đến C#, em tìm hiểu thêm một số tính năng
nâng cao, có ảnh hưởng đến performance.
• Các tính năng nâng cao trong C#:
o LINQ: là các tính năng query và biến đổi dữ liệu từ một bộ dữ liệu (như
một collection, một bảng trong CSDL quan hệ,…) ngay trong môi trường
C#. Nhờ có LINQ, các framework như Entity Framework và Entity
Framework Core có thể truy xuất dữ liệu trong các CSDL quan hệ một
cách thuận tiện.
o IEnumerable: IEnumerable là interface cơ sở cho các collection có thể
duyệt qua được trong C# bằng cách sử dụng Iterator pattern để duyệt qua
các phần tử trong collection thông qua các class thuộc interface
IEnumerator. Các thao tác LINQ có thể được thực hiện lên collection kế
thừa từ IEnumerable để query, biến đổi các phần tử.
o IQueryable: kế thừa từ interface IEnumerable, cung cấp khả năng tạo

expression tree để query dữ liệu từ các bộ dữ liệu ngoài bộ nhớ như các
CSDL. Expression tree cho phép IQueryable tạo nên các câu lệnh query
như lệnh SQL để thực hiện trên một CSDL quan hệ, nên các lệnh kết,
nhóm, hay điều kiện có thể được tích hợp thành một câu lệnh SQL hoàn
chỉnh để thực thi trong hệ quản trị CSDL. Đây là cải tiến so với cách query
tất cả dữ liệu vào bộ nhớ rồi áp dụng các lệnh khác của IEnumerable, do
IEnumerable chỉ có thể duyệt trên dữ liệu có sẵn trong bộ nhớ.
o IEnumerator: là interface chung có các class chứa hành vi duyệt collection
của IEnumerable. IEnumerator có nhiệm vụ quyết định cách duyệt qua

Võ Hồng Việt

Đỗ Phi Long


6
collection và khi IEnumerable cần được duyệt, nó sẽ trả về một
IEnumerator tương ứng với cách duyệt của collection.
• Một số tính năng của C# 9.0:
o Record type: kiểu dữ liệu reference type dùng để chứa dữ liệu bất biến, hỗ
trợ các tác vụ như so sánh giá trị (value equality), format string có sẵn, và
vẫn có hỗ trợ kế thừa
o with expression: toán tử giúp tạo ra một record mới từ record có sẵn ở vị
trí tốn hạng bên tay trái, với các giá trị được thay đổi nằm trong một đối
tượng anonymous object ở vị trí tốn hạng bên tay phải
o Init only setters: một accessor của property dùng để khởi tạo giá trị cho
property mà không cần qua accessor set
o Top-level statement: file code entry point của chương trình khơng cần phải
có class Program và hàm Main mà thay vào đó code xử lý có thể nằm trực
tiếp bên ngồi

o Target-typed new expression: tốn tử new có thể bỏ không cần ghi cụ thể
kiểu của đối tượng đang được khởi tạo, trình biên dịch biết được kiểu muốn
khởi tạo dựa vào khai báo kiểu của đối tượng
o Covariant return types: các hàm override từ một hàm được kế thừa có thể
trả về kiểu dữ liệu được kế thừa từ kiểu trả về của hàm gốc. Tính năng này
giúp tăng sự linh hoạt của tính đa hình lên đáng kể, đặc biệt trong các
trường hợp sử dụng Factory pattern hoặc Prototype pattern

Hình 2.2 Target-typed new expression
• Một số tính năng của C# 10:

Võ Hồng Việt

Đỗ Phi Long


7
o Record struct: Kiểu record cho các kiểu struct, hỗ trợ các tính năng như
các kiểu record class được giới thiệu trong C# 9.0
o Global using directive: từ khóa global cho phép chỉ thị using được áp dụng
lên tất cả các file code trong project
o Các cải tiến với lambda expression như: có thể được khai báo kiểu trả về,
có thể được áp dụng các attribute, kiểu của lambda expression (natural
type) có thể được biết bởi trình biên dịch
o Const string có thể được khởi tạo bằng một string được interpolate nếu như
các tham số cũng là const string
o Các kiểu record có thể sử dụng từ khóa sealed lên phương thức ToString để
ngăn không cho các kiểu kế thừa override phương thức này và ép chúng
phải sử dụng phương thức ToString được định nghĩa trong kiểu record cơ
sở

o Deconstruction có thể sử dụng biến đã có sẵn và khai báo biến mới cùng
lúc
Kết quả:
• Học được thêm nhiều tính năng mới và tiện dụng của C#, hiểu được cách hoạt
động của nhiều tính năng và đối tượng thơng dụng trong .NET
• Áp dụng một số trong các tính năng trên vào quá trình làm việc thường ngày
2.2.

Tìm hiểu sâu về OOP

Thời gian: 1 tuần
Nội dung: Tìm hiểu về các khái niệm nâng cao của mơ hình Lập trình hướng đối tượng
và các best practice khi phân tích, thiết kế và lập trình hướng đối tượng.
• SOLID: là một nhóm 5 nguyên tắc trong LTHĐT bao gồm (1) Single
responsibility principle, (2) Open-closed principle, (3) Liskov substitution
principle, (4) Interface segregation và (5) Dependency inversion. Các nguyên tắc
này được tạo nên để định hướng cho phát triển phần mềm bằng các ngôn ngữ
OOP, giúp phần mềm có thiết kế dễ bảo trì, mở rộng và tránh tình trạng trở nên
quá phức tạp, khó hiểu hoặc khơng thể chỉnh sửa.

Võ Hồng Việt

Đỗ Phi Long


8
• Design pattern: là các bản mẫu thiết kế trình bày cách giải quyết của một số vấn
đề phổ biến trong thiết kế hướng đối tượng, được đúc kết sau nhiều lần thực hiện
giải quyết các vấn đề đó. Các pattern gốc thể hiện những vấn đề kinh điển được
bắt gặp từ lâu trong lịch sử hướng đối tượng.

• Dependency injection (DI): là một mẫu thiết kế giúp tách công việc khởi tạo và
quản lý vòng đời của một đối tượng ra khỏi các đối tượng khác phụ thuộc vào nó.
Thay vì để đối tượng lớn khởi tạo và quản lý các đối tượng mà nó phụ thuộc vào,
với DI ta sẽ để nhiệm vụ khởi tạo và quản lý các đối tượng đó ở một nơi khác, và
chỉ truyền chúng vào đối tượng lớn khi khởi tạo hoặc khi gọi một phương thức
nào của nó mà cần sử dụng đến một đối tượng khác. Pattern này dẫn đến một
pattern khác mở rộng hơn – đưa các công việc khởi tạo và quản lý các đối tượng
được phụ thuộc vào một class gọi là Dependency injection container, tạo nên một
framework mà các dependency của một đối tượng có thể được khởi tạo, quản lý,
và truyền cho nó khi cần mà bản thân đối tượng khơng cần biết các dependency
đó đến từ đâu.
Kết quả:
• Học được cách thiết kế hướng đối tượng hiệu quả, dễ bảo trì và mở rộng
• Hiểu được các vấn đề cơ bản thường gặp phải khi thiết kế hướng đối tượng
• Học được cách quản lý dependency trong các phần mềm, pattern này được sử
dụng nhiều để quản lý các đối tượng trong các framework phát triển web như
ASP .NET Core
2.3.

Tìm hiểu về Entity Framework Core

Thời gian: 1 tuần
Nội dung: Tìm hiểu về EF Core – một object-relational mapper cung cấp khả năng tương
tác với CSDL quan hệ thơng qua các đối tượng .NET và có hỗ trợ nhiều CSDL quan hệ.
Sau khi tìm hiểu, em có một buổi thuyết trình về EF Core với các thành viên trong team
bao gồm các mentor và các bạn intern khác.
EF Core là lớp trừu tượng hóa các tương tác thực tế giữa chương trình và CSDL quan hệ,
các CSDL khác nhau sẽ có cách tương tác khác nhau với chương trình, các package
provider cung cấp các tương tác thực tế này. Mỗi CSDL có một package provider như
MySQL Connector, PostgreSQL Provider, SQL Provider,…


Võ Hoàng Việt

Đỗ Phi Long


9
• Entity class: các class .NET đại diện cho các table trong database, mỗi đối tượng
của một class đại diện cho một dòng trong table được đại diện bởi class đó. Mặc
định, tất cả property có get và set của entity class đều được dùng để tạo table
• DbSet: collection đại diện cho một table trong database, mỗi phần tử trong DbSet
là một đối tượng của entity class tương ứng

Hình 2.3 Các entity class trong EF Core
• Database context: đại diện cho một session giữa chương trình và database, ta có
thể dùng đối tượng này để query các entity cũng như chỉnh sửa chúng
• Migration: là một cơng cụ để tạo và quản lý các phiên bản của database. Ta có thể
định nghĩa các entity class và mối quan hệ của chúng trong code và sử dụng tool
của EF Core để tạo và áp dụng các migration. Lịch sử các migration được EF
Core lưu lại và ta có thể quay trở lại migration trước đó hoặc áp dụng tất cả các
migration chưa được áp dụng và EF Core sẽ thay đổi cấu trúc database tương ứng
• Property: là các thuộc tính của dữ liệu của một table trong database, ta có thể áp
dụng các thuộc tính bằng cách đặt attribute cho các trường dữ liệu hoặc cấu hình
dữ liệu của table trong class Database context
• Query: Để đọc dữ liệu từ database, ta dùng các phương thức LINQ để query trên
các DbSet, EF Core sẽ tạo các câu lệnh SQL tương ứng và khi các phương thức
như ToList() hoặc Single() được gọi, EF Core sẽ gửi câu lệnh đến database để
thực thi và trả về kết quả. Kết quả của các lệnh đọc dữ liệu là một collection các
entity


Võ Hoàng Việt

Đỗ Phi Long


10

Hình 2.4 Đọc dữ liệu thỏa điều kiện vào một collection entity
• Mutation: Để thêm hoặc xóa dữ liệu khỏi database, ta dùng các phương thức
LINQ như Add() và Remove() trên các DbSet với tham số là entity cần thêm hoặc
xóa. Để chỉnh sửa dữ liệu, ta thay đổi giá trị các thuộc tính của entity rồi gọi
DbContext.SaveChanges(). Các thay đổi thêm, xóa, sửa trên database chỉ được
thực thi sau khi gọi DbContext.SaveChanges()
• Aggregation: ta có thể dùng một số phương thức LINQ như Count, Sum, Average
trên các DbSet để thực hiện các phép kết xuất phổ biến
• Các best practice khi làm việc với EF Core:
o Nên Select chỉ các trường dữ liệu cần sử dụng để tránh đọc dữ liệu của tồn
bộ dịng trong table, điều này đặc biệt đáng lưu ý khi cấu trúc table lớn,
chứa nhiều trường dữ liệu có kích cỡ lớn
o Giới hạn số lượng phần tử khi đọc để tránh đọc toàn bộ table, đặc biệt với
các table có nhiều dịng dữ liệu
o Nếu một đối tượng được đọc từ database cần tham chiếu đến các đối tượng
liên quan đến nó, ta nên đọc chúng trong cùng một lệnh với đối tượng gốc
để giảm số lần chương trình phải gửi lệnh đọc đến database
o Mặc định, EF Core theo dõi các đối tượng được đọc lên từ database để phát
hiện sự thay đổi của chúng, ta có thể bỏ theo dõi trên các đối tượng readonly bằng cách gọi AsNoTracking() trên DbSet trước khi gửi lệnh đến
database. Việc này sẽ tiết kiệm thời gian và bộ nhớ cần để xử lý theo dõi
trạng thái của entity

Võ Hoàng Việt


Đỗ Phi Long


11
o Đối với các lệnh update cho nhiều dòng trong table hoặc update cả table, ta
nên tránh việc đọc các entity lên từ database rồi chỉnh sửa dữ liệu của
chúng. Việc này sẽ tốn cả thời gian và bộ nhớ để đọc toàn bộ dữ liệu trong
table, đồng thời EF Core cũng sẽ gửi đi một lệnh update cho mỗi entity
được thay đổi, dẫn đến tốn rất nhiều thời gian để gửi các lệnh. Thay vào đó,
ta có thể viết câu lệnh SQL để thực thi trực tiếp trên database bằng cách
truyền lệnh vào phương thức DbContext.ExecuteSqlRaw().
• Soạn slide và thuyết trình trước các thành viên trong team về EF Core, bài thuyết
trình nhận được đánh giá tốt và tạo được nhiều tương tác với các thành viên trong
team. Buổi thuyết trình chứa các nội dung như sau:
o Giới thiệu về EF Core và một số khái niệm trong EF Core
o Cách setup project để tích hợp EF Core
o Cách mơ hình hóa dữ liệu với EF Core
o Migration và quản lý schema
o Các thao tác đọc, ghi dữ liệu trong EF Core
o Các thao tác kết xuất dữ liệu trong EF Core
o Disconnected mode: làm việc với các entity bên ngoài DbContext
o Các vấn đề liên quan đến performance cần lưu ý
Kết quả:
• Học được cách làm việc với EF Core, giúp giảm thời gian viết các thành phần và
lệnh truy xuất database đi đáng kể
• Biết cách cấu hình và tùy chỉnh các thiết lập của EF Core
• Hiểu được cách hoạt động của EF Core
2.4.


Tìm hiểu về ASP .NET Core MVC và làm trang web demo

Thời gian: 1 tuần
Nội dung: Tìm hiểu về ASP .NET Core MVC và thực hành bằng cách xây dựng ứng
dụng demo.

Võ Hoàng Việt

Đỗ Phi Long


12
• MVC: là viết tắt của “Model-View-Controller”, là một mơ hình kiến trúc được sử
dụng phổ biến trong phát triển ứng dụng web, dù ban đầu được dùng cho các ứng
dụng giao diện đồ họa trên desktop. MVC có 3 thành phần, mỗi thành phần phụ
trách một công việc riêng:
o Model: Định nghĩa, xử lý, lưu trữ dữ liệu
o View: Giao diện, hiển thị dữ liệu từ Model
o Controller: Xử lý tương tác người dùng, điều khiển Model để phản hồi với
các tương tác
o Ngoài ra, ASP .NET Core MVC còn sử dụng một thành phần gọi là
ViewModel, dùng để mơ hình hóa các dữ liệu được hiển thị trên một View
cụ thể, nên một ViewModel có thể dành cho một View hoặc cũng có thể
dành cho nhiều View trong một số trường hợp các View có dữ liệu giống
nhau. View có thể truy xuất dữ liệu được mơ hình hóa ở ViewModel bằng
CSHTML

Hình 2.5 Mơ hình MVC
• Razor: là một render engine và một markup syntax giúp chứa code .NET trong
file HTML, file View sử dụng Razor có kiểu .cshtml. Razor cho phép chạy các


Võ Hoàng Việt

Đỗ Phi Long


13
lệnh C# trong file HTML, nhờ đó View có thể truy cập được dữ liệu ở
ViewModel hoặc ViewData, ViewBag,… Một trong số các ứng dụng hữu ích nhất
của tính năng này là khả năng hiển thị các danh sách các đối tượng dữ liệu, do
Razor có thể chạy một vịng lặp và điền thông tin của mỗi đối tượng vào một phần
tử của danh sách
• Các controller được map đến các path khác nhau của trang web để xử lý tương tác
ở các path đó. Controller có thể nhận vào ViewModel của View tương ứng ở path
và có thể trả về một View và truyền dữ liệu vào View đó, hoặc điều hướng tới một
Controller khác. Các phương thức của Controller được gọi là các action, mỗi
action xử lý một tương tác của người dùng với View. Cú pháp routing mặc định
của ứng dụng ASP .NET Core MVC là “[tên_miền]/[tên_controller]/[tên_action]”
• ASP .NET Core MVC sử dụng cấu trúc thư mục project và quy tắc đặt tên để tìm
và xác định các View được render. Khi controller trả về View, mặc định ASP
.NET sẽ tìm View có cùng tên với hàm action đã trả về. Trước tiên, ASP .NET sẽ
tìm View này ở thư mục View/[tên_controller], nếu khơng tìm thấy thì sẽ vào thư
mục Shared để tìm. Ta cũng có thể cung cấp đường dẫn tương đối hoặc tuyệt đối
khi trả về View cho ASP .NET
Kết quả:
• Hiểu được kiến trúc MVC và các hạn chế của nó
• Học được cách làm việc với ASP .NET Core MVC
• Hiểu được một phần cách hoạt động của ASP .NET Core MVC
• Áp dụng kiến thức đã học để xây dựng một trang web demo
2.5.


Tìm hiểu về ASP .NET Core Web API

Thời gian: 1 tuần
Nội dung: Tìm hiểu về REST và ASP .NET Core Web API.
• REST: là một kiểu kiến trúc mơ tả cấu trúc dữ liệu và các phương thức trong giao
tiếp giữa các phần mềm qua mạng máy tính. REST cung cấp một ngôn ngữ chung
cho tất cả các giao tiếp giữa client và server, và giúp định hình kiến trúc của một
API. Mọi RESTful API đều tuân theo một số các ngun tắc nhất định và client
ln có thể mong đợi phản hồi như nhau giữa các API khác nhau:

Võ Hoàng Việt

Đỗ Phi Long


14
o Identification of resources: mọi tài nguyên đều có một định danh, client và
server sử dụng định danh này để thao tác với tài nguyên
o Manipulation of resources: bản thể hiện tài ngun mà client giữ cần phải
có đủ thơng tin để chỉnh sửa hoặc xóa tài nguyên này
o Self-descriptive messages: mỗi thông điệp giữa client và server cần phải đủ
để bên nhận có thể hiểu tồn bộ nội dung mà khơng cần phải có thêm thơng
điệp nào khác
o Hypermedia as the Engine of Application State: thông điệp mà server gửi
cho client phải đủ để client biết mình có thể gửi các request nào tiếp theo
• Web API: là một API có thể được truy cập bằng giao thức HTTP qua mạng máy
tính. Các Web API được thiết kế tuân theo một kiến trúc cụ thể và từ đó định
nghĩa phương thức giao tiếp với client. Phần lớn Web API hiện nay sử dụng kiến
trúc REST, gọi là RESTful API; ngồi ra, cơng nghệ GraphQL cũng giúp định

nghĩa kiến trúc cho các Web API và mơ hình giao tiếp giữa chúng với client
• ASP .NET Core Web API: là framework dùng để xây dựng Web API với ASP
.NET Core, có nhiều điểm giống với ASP .NET Core MVC nhưng về bản chất thì
ASP MVC dùng để xây dựng các ứng dụng web server-side rendered - tức các
server ứng dụng web sẽ render các view trực tiếp và gửi đến client, còn ASP Web
API chủ yếu dùng để xây dựng các ứng dụng web client-side rendered – tức các
server ứng dụng web sẽ gửi dữ liệu cần dùng cho frontend dưới dạng JSON hoặc
XML, frontend sẽ dùng dữ liệu đó để render các view ra màn hình. Các action
method của controller trong ASP Web API sẽ trả về các thông điệp HTTP chứa
status code và có thể là một đối tượng dữ liệu được serialize thành JSON.
Kết quả:
• Hiểu được kiến trúc REST và các vấn đề nó giải quyết
• Hiểu được khái niệm Web API và biết cách thiết kế Web API theo kiến trúc
REST
• Biết cách làm việc với ASP .NET Core Web API
• Áp dụng kiến thức đã học được để xây dựng backend cho một trang web demo
với frontend sử dụng React

Võ Hoàng Việt

Đỗ Phi Long


15
2.6.

Tìm hiểu về React

Thời gian: 2 tuần
Nội dung: Tìm hiểu về React và thuyết trình với mentor

• React: là một thư viện frontend mã nguồn mở được viết bằng JavaScript, phát
triển bởi Facebook và ra mắt năm 2013. React sử dụng JSX để cho phép một hàm
trả về một element UI viết bằng HTML, nhờ đó nó cho phép tách giao diện web ra
thành các thành phần nhỏ có chứa dữ liệu và hành vi của bản thân chúng, làm ta
không cần thiết phải thao tác với các phần tử trong DOM một cách thủ cơng và
thay vào đó việc xây dựng giao diện trở nên xoay quanh các thành phần nhỏ được gọi là Component
• Function component: Ban đầu, một component trong React phải được viết dưới
dạng một class – mỗi class là một component - và các dữ liệu, trạng thái của
component được lưu trong các biến của đối tượng thuộc class đó, đây là cách duy
nhất để tạo được các component có trạng thái (stateful component). Tuy nhiên,
với sự ra mắt của các hook, function component lúc bấy giờ đã có thể chứa các
trạng thái cũng như hành vi thông qua các hook như useState và useEffect. Nhờ có
các hook, function component trở thành cách viết ngắn gọn hơn các class
component và dần thay thế class component, trở thành cách sử dụng component
mặc định trong nhiều project. Tương tự như class component, mỗi hàm có thể là
một component hoặc, nếu nó chỉ hỗ trợ tương tác với local state của React, là một
hook
• Các hook là các hàm giúp React lưu trữ các dữ liệu và trạng thái của component,
đồng thời cho phép các component tương tác với local state của React qua nhiều
cách khác nhau. Các hook cơ bản gồm useState, useEffect, useContext.
• Automatic Batching: thay vì cập nhật state của các component mỗi khi một hàm
cập nhật state của nó được gọi, React gom các thông báo cập nhật này lại thành
các mẻ (batch) và cập nhật chúng một lượt vào mỗi chu kỳ thời gian. Tính năng
này giúp cải thiện performance do có rất nhiều component có thể được cập nhật
state và mỗi lần React cập nhật state của một component thì nó phải render lại
giao diện tương ứng. Tuy nhiên, điều này cũng đồng nghĩa các state của các
component chưa chắc chắn đã được cập nhật ngay lập tức sau khi gọi một hàm set
state, nên ta khơng nên dựa vào đó để thao tác với state của component sau khi gọi
hàm set state vì có thể state chưa được React cập nhật và vẫn đang là state cũ


Võ Hoàng Việt

Đỗ Phi Long


16
• Sau khi tìm hiểu, em có một buổi thuyết trình về React với mentor. Bài thuyết
trình nhận dù được đánh giá tốt nhưng cũng nhận được nhiều góp ý về mặt cấu
trúc nội dung và diễn giải. Cụ thể, nội dung của bài thuyết trình chủ yếu dành cho
đối tượng người đã biết sử dụng JavaScript và đã biết sơ qua về React, nhưng bài
thuyết trình khơng đề cập đến việc đó, cũng như một số phần kiến thức chưa có
phần giới thiệu vấn đề nên người nghe sẽ khó hình dung được vấn đề mà tính
năng đó giải quyết.
Kết quả:
• Hiểu được các khái niệm trong React, cách làm việc và xây dựng frontend bằng
React
• Hiểu được các vấn đề mà React giải quyết
• Hiểu được một phần về cơ chế hoạt động của React
• Áp dụng React vào xây dựng frontend cho một trang web demo
2.7.

Tìm hiểu về TDD

Thời gian: 1 tuần
Nội dung: Tự tìm hiểu về TDD và tham gia buổi thuyết trình về TDD của các mentor
• TDD: viết tắt của Test driven development, là một quy trình phát triển phần mềm
dựa trên quy tắc chương trình khi chạy phải pass tất cả các test case. Về nguyên
lý, các test case định nghĩa phạm vi của chương trình và chương trình phải nằm
vừa đúng trong phạm vi đó thì mới khớp với u cầu.
• Chu kỳ thực hiện của phương pháp TDD:

o Viết một test case
o Chạy tất cả test case, các test case mới sẽ fail do chưa có code production
o Thêm các đoạn code đơn giản nhất vừa đủ để thỏa mãn các test case mới
o Chạy các test case, các test case mới lúc bấy giờ sẽ pass; nếu có test case
chưa pass, ta phải chỉnh sửa code được test ở các case đó cho đến khi
chúng đủ để pass

Võ Hồng Việt

Đỗ Phi Long


17
o Refactor lại code nếu cần, chạy lại các test case sau mỗi lần refactor để
đảm bảo các tính năng vẫn được giữ nguyên
o Lặp lại quá trình trên cho mỗi tính năng mới cần được thêm vào chương
trình

Hình 2.6 Chu kỳ thực hiện của TDD
• Các lợi ích của TDD:
o Giúp tạo ra các đoạn code tối ưu hóa
o Giúp developer phân tích và hiểu rõ yêu cầu phần mềm tốt hơn và thúc đẩy
hợp tác giữa bên kỹ thuật và khách hàng để làm rõ yêu cầu khi chúng chưa
rành mạch
o Việc thêm các tính năng mới và test chúng trở nên dễ hơn nhiều ở các giai
đoạn sau của quá trình phát triển
o Test coverage khi áp dụng TDD cao hơn nhiều so với các mơ hình phát
triển thường dùng do TDD tập trung vào việc tạo các test case cho mỗi tính
năng ngay từ trong giai đoạn đầu của q trình phát triển


Võ Hồng Việt

Đỗ Phi Long


18
o Tăng hiệu suất công việc của developer và giúp hình thành codebase linh
hoạt và dễ bảo trì
o Tích hợp tốt với các quy trình phát triển Agile và giúp thúc đẩy sự hợp tác
giữa các thành viên trong team development và team QA
• Các cơng cụ unit test trong C#: NUnit, xUnit và MSTest
o NUnit: là framework unit testing cho môi trường .NET, được port từ JUnit
và được viết lại với nhiều tính năng mới, hỗ trợ nhiều nền tảng .NET khác
nhau
o xUnit: là bộ kiểm thử mã nguồn mở được viết bởi nhà sáng tạo của NUnit
v2. Đây là công nghệ unit testing hiện đại nhất trong môi trường .NET
o MSTest: là framework unit test của Microsoft cho tất cả ngơn ngữ .NET
Kết quả:
• Hiểu được ngun lý của TDD và các vấn đề nó nhằm giải quyết
• Biết cách sử dụng công cụ kiểm thử xUnit và áp dụng vào kiểm thử cho trang web
demo
2.8.

Tìm hiểu về GraphQL

Thời gian: 1 tuần
Nội dung: Tìm hiểu về GraphQL và các implementation của nó.
• GraphQL: là một ngơn ngữ truy vấn và biến đổi dữ liệu mã nguồn mở dùng cho
các API, được phát triển nội bộ bởi Facebook vào năm 2012 trước khi được cơng
bố năm 2015. Nó định nghĩa ra một phương thức chia sẻ dữ liệu giữa client và

server theo cách mà cho phép client định nghĩa cấu trúc của dữ liệu mà client
muốn lấy từ server. Server implement GraphQL sẽ trả về cho client dữ liệu theo
đúng cấu trúc đã được định nghĩa. Điều này đồng nghĩa với việc các đối tượng dữ
liệu có liên quan có thể được dễ dàng fetch từ server về client trong một request,
đồng thời các dữ liệu bên trong đối tượng mà client nhận được vừa khớp với
những gì mà nó cần, hai tính năng này giúp giảm thiểu cả băng thơng và thời gian
truyền dữ liệu.

Võ Hồng Việt

Đỗ Phi Long


19

Hình 2.7 Mơ hình hoạt động của GraphQL
• GraphQL vs. REST: kiến trúc và phương thức giao tiếp mà GraphQL đề ra là
thách thức lớn đối với REST nhờ sự linh hoạt và tiện dụng trong truy vấn mà nó
mang lại. Các lợi ích của GraphQL so với REST như sau:
o Cải thiện Over-fetching: client có thể tự định nghĩa cấu trúc của dữ liệu mà
nó cần nên mọi dữ liệu được trả về từ GraphQL server đều được sử dụng.
Ngược lại, REST định nghĩa cấu trúc dữ liệu trả về theo các endpoint, mỗi
endpoint có cấu trúc dữ liệu cố định, dẫn đến rất dễ gửi về client quá nhiều
dữ liệu không cần thiết, đặc biệt đối với những đối tượng dữ liệu lớn và có
nhiều thuộc tính.
o Cải thiện Under-fetching: Ngược lại với over-fetching, under-fetching là
khi dữ liệu được trả về từ một endpoint REST không đủ để client thực hiện
các tác vụ của nó và phải gửi thêm một request để lấy các thơng tin có liên
quan đến dữ liệu vừa được trả về. Điều này dẫn đến tăng thời gian client
cần để xử lý thông tin. Với GraphQL, client có thể định nghĩa cấu trúc dữ

liệu bao gồm các đối tượng dữ liệu khác liên quan đến dữ liệu gốc và
server sẽ trả về đủ các dữ liệu client cần
o Từ hai ưu điểm trên phát sinh thêm một ưu điểm nữa của GraphQL so với
REST, đó là cải thiện sự hợp tác giữa các developer frontend và các
developer backend, do client có thể định nghĩa các dữ liệu mà nó cần nên
các lập trình viên frontend khơng cịn phải phụ thuộc vào backend để cung

Võ Hoàng Việt

Đỗ Phi Long


×