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 WEB VỚI ANGULAR & .NET
Cơng ty thực tập
NETCOMPANY VN
Người phụ trách
STEVE CARL WINBERG
Thực tập sinh
Đỗ Thị Thanh Nhã
TP. Hồ Chí Minh, tháng 12 năm 2022
Steve Carl Winberg
Đỗ Thị Thanh Nhã
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.
Steve Carl Winberg
Đỗ Thị Thanh Nhã
LỜI CẢM ƠN
Trân trọng gửi lời cảm ơn NETCOMPANY 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/techlead, 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
bác Steve & các anh/chị/bạn trong team FlexDanmark đã 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 bác Steve đã dẫn dắt 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 ở Netcompany.
Các ý kiến đóng góp và lời khuyên của Steve 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.
Đỗ Thị Thanh Nhã
TP.HCM, ngày 25 tháng 12 năm 2022
Steve Carl Winberg
Đỗ Thị Thanh Nhã
NHẬN XÉT CỦA KHOA
Steve Carl Winberg
Đỗ Thị Thanh Nhã
MỤC LỤC
LỜI MỞ ĐẦU ............................................................................................................................
LỜI CẢM ƠN ............................................................................................................................
NHẬN XÉT CỦA KHOA ..........................................................................................................
MỤC LỤC ..................................................................................................................................
DANH MỤC HÌNH ẢNH ..........................................................................................................
Chương 1:
Giới thiệu công ty thực tập .................................................................................. 8
Chương 2:
Nội dung thực tập.............................................................................................. 10
1.
Tìm hiểu cơng ty và các kỹ năng cơ bản trong cơng ty .................................................. 10
2.
Nghiên cứu kỹ thuật ...................................................................................................... 11
2.1.
Tìm hiểu các tính năng nâng cao của C# .NET ........................................................ 11
2.2.
Tìm hiểu sâu về OOP .............................................................................................. 12
2.3.
Tìm hiểu về Entity Framework Core ..................................................................... 113
2.4.
Tìm hiểu về Controller-Service-Repository Pattern ................................................. 14
2.5.
Tìm hiểu về Restful API.......................................................................................... 15
2.6.
Tìm hiểu về Angular ............................................................................................... 16
2.7.
Tìm hiểu về JWT .................................................................................................... 17
3.
Thực hiện project .......................................................................................................... 19
4.
Lịch làm việc ................................................................................................................. 19
Chương 3:
Chi tiết về project .............................................................................................. 22
1.
Giới thiệu về FlexDanmark ........................................................................................... 22
2.
Thực hiện ...................................................................................................................... 24
3.
Kế hoạch ....................................................................................................................... 24
Steve Carl Winberg
Đỗ Thị Thanh Nhã
TÀI LIỆU THAM KHẢO ..................................................................................................... 27
TỔNG KẾT ............................................................................................................................ 28
Steve Carl Winberg
Đỗ Thị Thanh Nhã
DANH MỤC HÌNH ẢNH
Hình 1.1 Logo Netcompany Vietnam .......................................................................................... 8
Hình 1.2 PROFITS Core Banking System................................................................................... 8
Hình 1.3 Icarus logo .................................................................................................................. 9
Hình 1.4 Fifa+ logo ................................................................................................................... 9
Hình 2.1 Kế hoạch học tập và làm việc của kỳ thực tập ............................................................ 11
Hình 2.2 Các entity class trong EF Core .................................................................................. 13
Hình 2.3 Mẫu thiết kế Controller-Service-Repository ............................................................... 15
Hình 3.1 Logo FlexDanmark .................................................................................................... 23
Hình 3.2 Các hoạt động của FlexDanmark Facilitator – sơ đồ trên website chính thức của
FlexDanmark ........................................................................................................................... 24
Steve Carl Winberg
Đỗ Thị Thanh Nhã
8
Chương 1: Giới thiệu cơng ty thực tập
Hình 1.1 Logo Netcompany Vietnam
1.
Giới thiệu công ty Netcompany Vietnam
Được thành lập vào năm 2000, Netcompany là một trong những Công ty CNTT thành cơng nhất
ở Bắc Âu. Với văn phịng tại Việt Nam, Vương quốc Anh, Na Uy, Hà Lan, Ba Lan và trụ sở chính
tại Copenhagen, Đan Mạch.
2.
Sản phẩm của cơng ty
Trong q trình phát triển của cơng ty, Netcompany đã triển khai thành công nhiều sản phẩm,
phần lớn trong số được nhiều người biết đến và sử dụng. Một số sản phẩm được công bố rộng rãi
bao gồm:
●
Profits: Hệ thống ngân hàng đa tiền tệ, trực tuyến, real-time, customer-based, được thiết
kế bằng cách sử dụng các phương pháp và công cụ hiện đại, với các thông số kỹ thuật bảo mật
cao nhất, theo tiêu chuẩn chất lượng quốc tế.
Hình 1.4 PROFITS Core Banking System
Steve Carl Winberg
Đỗ Thị Thanh Nhã
9
●
Icarus: Hệ thống tích hợp các ứng dụng thuế có khả năng cấu hình cao, mục đích tốt nhất,
được phát triển riêng cho các cơ quan thu ngân sách khu vực cơng:
Hình 1.5 Icarus logo
●
Fifa+: Nền tảng kỹ thuật số đẳng cấp thế giới kết nối người hâm mộ bóng đá khắp năm
châu.
Hình 1.6 Fifa+ logo
Steve Carl Winberg
Đỗ Thị Thanh Nhã
10
Chương 2: Nội dung thực tập
Đợt thực tập tại Netcompany Vietnam đã 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. Ngồ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 (buddies) – trong 4 tuần đầu tiên.
Sau đó, thực tập sinh sẽ tham gia 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ẽ được giao các task và deadline để thực
hiện.
Các task em được giao trong quá trình thực hiện project là xây dựng các giao diện web phía frontend dựa trên UI design, dựng model và migration phía backend dựa trên model diagrams, viết
document cho các update sau khi làm rõ và xác nhận với khách hàng, 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 Netcompany & company toolkit
●
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/buddy/teamlead 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
Steve Carl Winberg
Đỗ Thị Thanh Nhã
11
2.
Nghiên cứu kỹ thuật
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# .NET
Thời gian: 4 tuần
Nội dung: Tìm hiểu các tính năng mới trong phiên bản .NET 4.7.2 . Ngồi ra, trong q trình
thực hiện các task liên quan đến C# & .NET Framework, 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 em tìm hiểu trong C#:
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 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.
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 hồ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ớ.
●
Một số tính năng của C# 9.0:
Steve Carl Winberg
Đỗ Thị Thanh Nhã
12
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
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.
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
● Có thể tạo một ứng dụng nhỏ bằng .NET.
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à 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 q phức tạp, khó hiểu hoặc không thể chỉnh sửa.
●
Design patterns: 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
Steve Carl Winberg
Đỗ Thị Thanh Nhã
13
đế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 quản lý dependency trong pattern Controller-Service-Repository, 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.
●
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.
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
●
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 đó.
●
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
Steve Carl Winberg
Đỗ Thị Thanh Nhã
14
●
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.
●
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.
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
2.4.Tìm hiểu về Controller-Service-Repository Pattern
Thời gian: 1 tuần
Nội dung: Tìm hiểu Controller-Service-Repository Pattern và implement với .NET.
●
Controller-Service-Repository: là mơ hình mẫu thiết kế 3 layer chuyên biệt để xử lý 3
nhiệm vụ khác nhau. Các layer gồm:
o
Controller: là top layer, giữ nhiệm vụ expose data và giao tiếp với bên bên thứ 3 – chẳng
hạn như các component/data từ request của phía frontend
o
Service: là layer giữa, xử lý các business logic, các logic u cầu tìm nạp/lưu dữ liệu phía
db, nó sẽ kết nối với repository giúp thực hiện nhiệm vụ.
Steve Carl Winberg
Đỗ Thị Thanh Nhã
15
o
Repository: là layer cuối cùng, chịu trách nhiệm lưu trữ và truy xuất data – nói cách khác,
nó thực hiện các query gọi tới database.
Hình 2.5 Mẫu thiết kế Controller-Service-Repository
Kết quả:
●
Hiểu được mẫu thiết kế Controller-Service-Repository và implement trên .NET C#
●
Học được cách mẫu thiết kế này làm việc với entity framework
●
Áp dụng kiến thức đã học để hiểu code của project.
2.5.Tìm hiểu về Restful API
Thời gian: 1 tuần
Nội dung: Tìm hiểu về REST
REST: Là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web (thiết kế Web
services) để tiện cho việc quản lý các resource. Nó chú trọng vào tài nguyên hệ thống (tệp văn
bản, ảnh, âm thanh, video, hoặc dữ liệu động…), bao gồm các trạng thái tài nguyên được định
dạng và được truyền tải qua HTTP. Các nguyên tắc mà Restful API tuân thủ:
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 ngun 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.
Steve Carl Winberg
Đỗ Thị Thanh Nhã
16
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.
●
Kết quả:
● Hiểu được những khái niệm cơ bản về API.
● Xây dựng được một máy chủ có các API đơn giản với Restful API.
● Hiểu hơn về lập trình Web Back-end.
2.6.Tìm hiểu về Angular
Thời gian: 2 tuần
Nội dung: Tìm hiểu về Angular và vận dụng vào project
●
Angular: được phát triển từ những năm 2009 và được duy trì bởi Google, được xem là
một open source (mã nguồn mở) hay frameworks miễn phí chuyên dụng cho công việc thiết kế
web. Với Angular, 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
-
Khái niệm cơ bản về Component.
Component là một lớp nó thường hiểu như là controller tương tác giao diện người dùng. Một
component thường có 3 thành phần chính là code TypeScript, template HTML và CSS.
-
Typescript:
TypeScript được xem là một phiên bản nâng cao hơn của JavaScript vì nó được thiết kế thêm
nhiều chức năng tiện lợi hơn, cải tiến hơn từ những điểm yếu của JavaScript như các lớp hướng
đối tượng và Static Structural typing, bên cạnh đó TypeScript cịn có thể hoạt động rộng rãi cho
các ứng dụng của ngôn ngữ Angular2 và Nodejs.
- Module:
Module là cách chia nhỏ các thành phần ứng dụng (giống package trong Java). Với Angular sử
dụng đến decorator có tên là @NgModule để khai báo, Module là một lớp chứa các thành phần
để thực hiện các chức năng nào đó.
Kết quả:
● Hiểu được những khái niệm cơ bản trong lập trình frontend với Angular.
● Có thể đọc và hiểu được các phần trong cấu trúc code dự án.
Steve Carl Winberg
Đỗ Thị Thanh Nhã
17
2.7.Tìm hiểu về JWT
Thời gian: 1 tuần
Nội dung: Tự tìm hiểu về JWT và tham gia buổi thuyết trình về JWT của team DevOp
●
JWT: viết tắt của Json web token, à một tiêu chuẩn mở (RFC 7519) nhằm xác minh thơng
tin an tồn giữa các bên Client-Server dưới dạng JSON object. Thơng tin này có thể được xác
minh và tin cậy vì nó được ký điện tử - digitally signed. JWT có thể được ký bằng cách sử dụng
một secret (với thuật toán HMAC) hoặc cặp public/private key dùng chuẩn RSA hoặc ECDSA.
●
JWT bearer grant type:
Một JWT bao gồm 3 phần:
o Header: mơ tả loại token và thuật tốn dùng để mã hoá.
o Payload: chứa dữ liệu.
o Signature: để xác minh token.
Tất cả ba phần phải được mã hoá Base64URL để chúng được transferred an tồn trong chuỗi
query.
Hình 2.6 JWT
●
Access token:
o
A token which is issued as a result of successful authorization. An access token can be
obtained for a set of permissions (scopes) and has a pre-determined lifetime after which it expires.
o
Một token được tạo ra sau khi authorized thành công. Token này có thể được sử dụng để
gửi requests đến các scopes nhất định. Token có thời hạn sử dụng, sau khi hết hạn, token trở nên
vô dụng.
Steve Carl Winberg
Đỗ Thị Thanh Nhã
18
Kết quả:
●
Hiểu được nguyên lý của JWT và các vấn đề nó nhằm giải quyết
●
Hiểu được phạm vi của JWT trong project và biết cách trích xuất các properties từ token
để sử dụng trong phân quyền gọi API phía backend
Steve Carl Winberg
Đỗ Thị Thanh Nhã
19
3.
Thực hiện project
Sau khi củng cố kiến thức cũng như học tập các kiến thức mới trong 4 tuần đầu của kỳ thực tập,
em được assigned vào project FlexDanmark, có tech stack như sau:
●
Frontend: Angular
●
Backend: .NET Core, Entity Framework
Chi tiết đồ án sẽ được nói ở phần sau.
4.
Lịch làm việc
Tuần
1
2
3
Cơng việc
Người hướng dẫn
Tìm hiểu về cơng
ty, cách tổ chức của công
ty.
Làm quen với các
công cụ làm việc trong
công ty.
Học cách trao
đổi, làm việc qua email,
Teams và Toolkit.
Tìm hiểu các tính
năng mới của .NET 4.7.2
Học OOP
Học về EF Core
Đọc tài liệu EF
Core
Xem qua project
tech stack
Đọc tài liệu về
Controller-ServiceRepository pattern
Hiểu flow của
source code, tham khảo
và implement pattern
Controller-Service-Repo
trên .NET C#
Steve Carl Winberg
Steve Carl Winberg
Mức
độ
hoàn
thành
100%
Steve Carl
Winberg
100%
Steve Carl
Winberg
100%
Nhận xét của người
hướng dẫn
Đỗ Thị Thanh Nhã
20
4
5
6
7
Học về Web API
– Restful API
Học về migration
trong EF Core
Implement
Restful API trên .NET
Tìm hiểu về API
integration với Angular
Bắt đầu đọc hiểu
source code và làm task
của project:
Task 1: Tạo
models theo model
design diagram và tạo
file migration mới cho
những model đã tạo
Tìm hiểu thêm về
controller và mapping
model-entity-DTO
Task 2: Tạo
controllers
theo
requirement documents
Được giao 1
feature
của
FlexDanmark
–
Facilitator:
Đọc documents
Clarify
và
confirm về feature được
giao với khách hàng
người Đan Mạch
Cập
nhật
document ứng với thông
tin mới từ khách hàng
Tham
gia
meeting hội ý về triển
khai feature
Làm diagram mới
cho những thơng tin đó
Bắt
đầu
implement feature được
giao:
Steve Carl Winberg
Steve Carl
Winberg
100%
Steve Carl
Winberg
100%
Steve Carl
Winberg
100%
Steve Carl
Winberg
100%
Đỗ Thị Thanh Nhã
21
8
9
10
Phía
frontend:
Học
về angular
component để xây dựng
page frontend
Học thêm về
naming convention và
code style của project
Phía backend:
xây dựng model -> tạo
migration
Phía backend:
Dựng ControllerService-Repository
tương ứng với feature
được giao
Phía
frontend:
đọc tài liệu về service
Tiếp tục xây dựng
component cho page
frontend
Phía
backend:
Tạo thành cơng API
Phía
frontend:
đọc tài liệu về service:
Integrate thành
cơng API bằng angular
service -> gọi service
vào các component
Phía
backend:
Viết testcase cho Unittesting. Học cách sử
dụng code coverage
extension để tự đánh giá
test case.
Đọc tài liệu để
hiểu về các features và
constraints của Azure
DevOps – cơng cụ quản
lý source code
Tìm hiểu các cách
xác thực người dùng
trong Azure DevOps
Steve Carl Winberg
Steve Carl
Winberg
100%
Steve Carl
Winberg
100%
Steve Carl
Winberg
100%
Đỗ Thị Thanh Nhã
22
11
12
Pass code review.
Được giao task cho
feature mới.
Tìm hiểu các
phương thức xác thực
khác cho Azure DevOps
và ứng dụng Angular
Học về OAuth
2.0
Implement task
được giao
Tìm hiểu về
middleware và cách trích
xuất các feature từ bearer
token
Tìm hiểu về
middleware và cách trích
xuất các feature từ bearer
token
Hồn thành kỳ
thực tập và các thủ tục
kết thúc
Steve Carl
Winberg
100%
Steve Carl
Winberg
100%
Chương 3: Chi tiết về project
1.
Giới thiệu về FlexDanmark
FlexDanmark là một công ty độc lập được thành lập bởi 5 công ty giao thông vận tải
Nordjyllands Trafikselskab (NT), Midttrafik, Sydtrafik, FynBus và Movia.
Dự án FlexDanmark được khởi công nhằm xây dựng một nền tảng đặt xe/tàu và quản lý vận tải
công cho Đan Mạch, cung cấp các dịch vụ xe/tàu phổ thông và các dịch vụ đặc biệt được quản
lý bởi 5 công ty kể trên.
Những mảng mở rộng của FlexDanmark gồm các tiện ích về xe/tàu cho người khuyết tật, cho
người già, cho viện dưỡng lão, cho tuyến đường đặc biệt, cho trường hợp khẩn cấp, etc.
Steve Carl Winberg
Đỗ Thị Thanh Nhã
23
Hình 3.1 Logo FlexDanmark
●
Sơ lược các tính năng:
Do các tài liệu về dự án hệ thống FlexDanmark được bảo mật tuyệt đối, các tính năng cụ thể của
FlexDanmark cũng nằm trong các tài liệu này, nên em chỉ có thể nói sơ lược về hệ thơng
FlexDanmark nói chung và các feature của FlexDanmark Facilitator nói riêng.
-
-
-
-
Phía system administrator: system admin sẽ quản lý việc thêm/bớt các thành viên
của dự án FlexDanmark (hiện gồm 5 công ty vận tải) và quản lý tất cả các modules
của hệ thống
Phía organisation: Gồm 5 công ty thành viên của FlexDanmark Nordjyllands
Trafikselskab (NT), Midttrafik, Sydtrafik, FynBus và Movia, 5 công ty này sẽ quản
lý các phương tiện, dịch vụ, tiện ích, tuyến đường, cước phí và hệ thống tính tốn
định giá của riêng họ và được phép sử dụng các tính năng quản lý tài nguyên vận
tải của hệ thống
Phía người dùng: là đối tượng người dùng đặt xe/tàu trên FlexDanmark, gồm các
viện dưỡng lão, người khuyết tật, gia đình, cơng ty có nhu cầu đặt tàu/xe phục vụ
các mục đích chuyên biệt. Đối tượng người dùng thứ hai là các
vendor/authority/authority department cung cấp dịch vụ vận chuyển cho người đặt
xe.
Phía các nhà phân tích tài chính: là đối tượng analysist, có nhu cầu dùng
FlexDanmark để trích xuất các thơng tin về cước phí, lượng vận tải, tần suất đặt xe,
lượng phương tiện phục vụ/tham gia giao thơng, nhằm tính tốn gia giảm chi phí,
tuyến đường và phương tiện cho 5 công ty thành viên.
Steve Carl Winberg
Đỗ Thị Thanh Nhã
24
Hình 3.1 Các hoạt động của FlexDanmark Facilitator – sơ đồ trên website chính thức của
FlexDanmark
2.
Thực hiện
Team FlexDanmark gồm:
-
3.
FlexDanmark Facilitator – hỗ trợ các feature phía admin
FlexDanmark Booking – hỗ trợ các feature phía người dùng là authority department
và người đặt xe
FlexDanmark Settlement – hỗ trợ và đảm bảo hàng hóa/dịch vụ suốt và sau chặng
đường
FlexDanmark Core – đảm nhận system chun tính tốn chi phí – qng đường cho
FlexDanmark
Kế hoạch
Giai đoạn bàn giao:
●
Tìm hiểu các cơng nghệ trong tech stack của project: Angular, TypeScript, .NET Core,
Restful API, Entity Framework Core, SCSS
●
Đọc codebase phần backend
●
Đọc codebase phần frontend
Nhận công việc (tasks):
Steve Carl Winberg
Đỗ Thị Thanh Nhã
25
●
Nhận task “Implement ... models according to model diagrams”
●
Nhận task “Implement ... controller according to requirement document”
●
Nhận task “Implement ... delete/get/post API”
●
Nhận task “Refactor code from ... page in the frontend”
●
Nhận task “Clarify with FlexDanmark about ... feature and update requirement
document”
●
Nhận task “Implement ... delete/get/post API”
Thực hiện:
Đọc code phần backend
Tạo models theo model design diagram và tạo file migration mới cho những model đã
tạo
Tạo pull request resolve các comment trong pull request merge code
Kết thúc task
Đọc documents
Clarify về các API request methods cần có trong file controller
Implement controller dựa trên document
Tạo pull request resolve các comment trong pull request merge code
Kết thúc task
Đọc task requirement, chia nhiệm vụ cần làm thành các phần nhỏ
Đọc documents backend
Clarify về các API request methods cần có trong file controller
Đọc documents frontend
Nhận thấy xung đột giữa document phía backend và frontend Hỏi ý kiến teamlead
Teamlead hướng dẫn gặp gỡ khách hàng phía Đan Mạch và trao đổi về những điểm
không thống nhất trong document
Thống nhất với khách hàng và cập nhật document
Implement frontend và backend
Tạo pull request resolve các comment trong pull request merge code
Kết thúc task
Đọc task requirement
Đọc document để hiểu feature cần refactor
Đọc code frontend
Refactor lại code bị trùng, code không sử dụng, code kém hiệu quả ở các component
trong frontend
Refactor code Tham khảo ý kiến teamlead solution được xác nhận
Tạo pull request resolve các comment trong pull request merge code
Steve Carl Winberg
Đỗ Thị Thanh Nhã