ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
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
THỰC TẬP TỐT NGHIỆP - SE501.M21
LẬP TRÌNH ỨNG DỤNG WEB VỚI
ANGULAR VÀ ASP.NET CORE
Công ty thực tập: Công ty TNHH FPT software
Người phụ trách: Trần Việt Hùng
Thực tập sinh: Quản Tiến Nghĩa - 18520111
TP. Hồ Chí Minh, tháng 5 năm 2022
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
LỜI MỞ ĐẦU
Công nghệ thông tin đã và đang phát triển sơi động trên tồn cầu. Trên thực tế, bất cứ
ngành nghề nào hiện nay đều có nhu cầu ứng dụng cơng nghệ thơng tin trong tự động hố,
tối ưu hố, đồng bộ hố nghiệp vụ của họ. Có thể thấy nhu cầu sản xuất và mở rộng các dự
án phần cứng, phần mềm là vơ cùng cần thiết. Đây chính là điều kiện ra đời và phát triển của
các công ty outsource trong lĩnh vực cơng nghệ thơng tin nói chung.
Sau khi cân nhắc và tìm hiểu kỹ lưỡng về thị trường outsource, em nhận thấy công ty
TNHH Phần mềm FPT chính là một nơi lý tưởng để bản thân tiếp tục trau dồi và học tập.
Công ty không chỉ đáp ứng đúng định hướng của em về phát triển phần mềm mà cịn đem
đến một mơi trường làm việc chun nghiệp với mơ hình chặt chẽ, hiệu quả, đề cao tính sáng
tạo, rèn luyện và kết nối giữa các thành viên trong cơng ty.
Do đó, với nền tảng kiến thức đã tích luỹ được sau ba năm học tập tại Đại học Công
nghệ thông tin, với những kiến thức q báu sau q trình làm việc cùng thầy cơ, bạn bè, em
quyết định trau dồi những kinh nghiệm thực tế đầu tiên tại công ty Phần mềm FPT.
1
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
LỜI CẢM ƠN
Em trân trọng gửi lời cảm ơn đến Quý công ty TNHH Phần mềm FPT đã tạo điều
kiện cho em có cơ hội được thực hiện q trình thực tập ở cơng ty, qua đó, em có cơ hội trở
thành thành viên chính thức của cơng ty.
Em xin gửi lời cảm ơn đến anh mentor và các bạn, các anh chị cùng khố training đã
có những sự hỗ trợ hết sức nhiệt tình. Điều đó khơng chỉ giúp em hoàn thiện bản thân về mặt
kiến thức và kỹ năng, mà cịn giúp em hồ nhập tốt nhất với mơi trường và văn hố chun
nghiệp.
Cũng xin cảm ơn thầy cơ và bạn bè trong khoa Công nghệ phần mềm đã nhiệt tình hỗ
trợ, tạo điều kiện cho em làm bài báo cáo này.
Mặc dù đã cố gắng hoàn thành báo cáo với tất cả nỗ lực song kết quả của em chắc
chắn khơng tránh khỏi những thiếu sót, em rất mong nhận được sự thơng cảm và góp ý chân
thành từ các thầy cô. Em xin chân thành cảm ơn.
Thành phố Hồ Chí Minh, ngày 18 tháng 12 năm 2021
Quản Tiến Nghĩa
2
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
NHẬN XÉT CỦA KHOA
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
...............................................................................................................................................................
3
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
MỤC LỤC
LỜI MỞ ĐẦU
1
LỜI CẢM ƠN
2
NHẬN XÉT CỦA KHOA
3
MỤC LỤC
4
CHƯƠNG 1 - GIỚI THIỆU CƠNG TY
5
1.1. Giới thiệu về cơng ty FPT Software
5
1.2. Sản phẩm của công ty
6
CHƯƠNG 2 - NỘI DUNG THỰC TẬP
7
2.1. Tìm hiểu về cơng ty và cài đặt các kênh thơng tin
7
2.2. Tìm hiểu các kiến thức và kỹ năng cơ bản
7
2.3. Nghiên cứu công nghệ và xây dựng project demo
8
2.3.1. Angular
8
2.3.2. NgRx - state management framework
11
2.3.3. ASP.NET Core
12
2.4. Review code và nộp sản phẩm cuối khoá
CHƯƠNG 3 - CHI TIẾT VỀ PROJECT
3.1
Giới thiệu về dự án
13
14
14
3.1.1 Tổng qt
14
3.1.2 Một số chức năng chính
14
3.2 Sản phẩm hồn chỉnh
15
CHƯƠNG 4 - TỔNG KẾT
18
TÀI LIỆU THAM KHẢO
19
4
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
CHƯƠNG 1 - GIỚI THIỆU CƠNG TY
1.1. Giới thiệu về cơng ty FPT Software
Công ty FPT Software, tên gọi khác của công ty Phần mềm FPT, thành lập năm
1999, là công ty thành viên của FPT, Tập đồn Cơng nghệ hàng đầu của Việt Nam. Sau 17
năm thành lập FPT Software hiện đang là công ty phần mềm lớn nhất của Việt Nam và đứng
trong Top 100 Nhà cung cấp dịch vụ Outsourcing toàn cầu do International Association of
Outsourcing Professionals (IAOP) đánh giá.
FPT Software theo đuổi mục tiêu gia công phần mềm để đáp ứng cho nhu cầu phát
triển công nghệ thông tin của các hãng phần mềm trong nước, các công ty lớn trong nước và
tham vọng hơn là xuất khẩu phần mềm trên tồn thế giới cho các cơng ty nước ngồi biết đến
tập đồn FPT, mục đích chính là vươn đến tầm cao mới thông qua công nghệ nhằm nâng cao
năng suất lao động.
5
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
1.2. Sản phẩm của công ty
Là công ty chuyên xuất khẩu dịch vụ phần mềm, FPT Software cung cấp các dịch vụ
phát triển phần mềm và bảo trì, triển khai ERP, QA, chuyển đổi ứng dụng, hệ thống nhúng,
điện toán di động, điện toán đám mây… trong nhiều lĩnh vực như: Tài chính ngân hàng,
Viễn thơng, Y tế, Chế tạo, Cơng nghiệp xe hơi, Dịch vụ công… Hiện FPT Software đang tập
trung nghiên cứu và phát triển dịch vụ công nghệ thông tin dựa trên những nền tảng công
nghệ mới như IoT, S.M.A.C, cho các lĩnh vực sản xuất máy bay, sản xuất ơ tơ, ngân hàng,
truyền hình vệ tinh, viễn thơng trên phạm vi tồn cầu. Cơng ty hiện đã và đang cung cấp dịch
vụ cho khoảng 450 khách hàng là các tập đồn lớn trên thế giới, trong đó có 43 khách hàng
nằm trong danh sách Fortune Global 500.
Một số đối tác lớn của công ty bao gồm: Hitachi, NEOPOST, Petronas, Deutsche
Bank, và Unilever.
6
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
CHƯƠNG 2 - NỘI DUNG THỰC TẬP
2.1. Tìm hiểu về cơng ty và cài đặt các kênh thông tin
● Thời gian: 2 ngày (onboarding)
● Nội dung chính:
Học khố học dayone bắt buộc của công ty:
+ Giới thiệu về công ty, mục tiêu, sứ mệnh, lịch sử phát triển và những thành tựu mà
công ty đã đạt được.
+ Cơ cấu tổ chức và trách nhiệm của các đơn vị, nhân sự chính trong công ty.
+ Nội quy công ty, các quy định về quyền lợi và nghĩa vụ của nhân viên.
+ Các khố học về quy trình nghiệp vụ và hành chính trong công ty, hướng dẫn sử dụng
các tool nội bộ.
+ Các khố học về an tồn và bảo mật thơng tin của công ty.
Kết quả
+ Hiểu và đảm bảo tuân thủ các quy tắc mà công ty yêu cầu, đồng thời nắm rõ các
quyền lợi và cơ hội phát triển bản thân ở cơng ty.
2.2. Tìm hiểu các kiến thức và kỹ năng cơ bản
●
●
+
+
+
Thời gian: 4 ngày (fundamental training)
Nội dung chính:
Tham gia các khố học nội bộ dành cho nhân viên phát triển phần mềm.
Cách sử dụng và cài đặt máy ảo làm việc tại nhà.
Hướng dẫn cài đặt và sử dụng các development tools như Visual Studio, Visual
Studio Code, Gitbash, Postman, Microsoft SQL Server.
+ Khoá học Cloud essential giới thiệu sơ bộ về nền tảng AWS và các dịch vụ liên quan.
+ Khố học về các mơ hình phát triển phần mềm.
●
+
+
+
Kết quả
Biết vận dụng cách quản lí mã nguồn bằng Git CLI.
Cài đặt thành công môi trường làm việc trên máy ảo.
Hiểu và sẵn sàng bước vào các dự án với cách mơ hình đã được huấn luyện, trong đó
tập trung chủ yếu vào mơ hình Scrum-Agile
7
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
2.3. Nghiên cứu công nghệ và xây dựng project demo
● Thời gian: 2 tháng (technical training)
● Nội dung chính: nghiên cứu các công nghệ, kĩ thuật để tham gia project thực tế
Với kiến thức nền tảng là C# .NET core, Javascript, Typescript, NodeJS, SQL Server,
HTML, CSS, khoá đào tạo đã tạo điều kiện cho em mở rộng kiến thức cho bản thân với
những công nghệ mới sau đây:
2.3.1. Angular
Angular là một open-source framework chuyên dùng cho việc thiết kế và phát triển
front end cho ứng dụng web. Angular được phát triển và duy trì thường xuyên bởi Google.
Angular được biết đến như một trong những những frameworks front end mạnh mẽ nhất,
thích hợp cho việc build nhanh các website dạng Single Page Application (SPA).
Tại chương trình đào tạo ở cơng ty, em được tiếp xúc với 2 phiên bản Angular 1
(AngularJS) và Angular 12, để thích ứng tốt nhất với tất cả dự án đang có tại đơn vị quản lý.
Nhờ thế, em thấy được những điểm cải tiến về mặt cấu trúc, thiết kế của các phiên bản
Angular 2+ so với AngularJS.
Các tính năng và khái niệm trọng tâm của Angular:
+ Module: Module cho pháp gom nhóm các directive và service tương đồng về mặt
chức năng hay ngữ nghĩa, qua đó có thể sử dụng lại ở nhiều nơi trong và ngồi project
thơng qua việc import và export module. Mỗi chương trình Angular có đúng 1 root
module đại diện cho toàn bộ ứng dụng. Để khai báo 1 module mới trong Angular, ta
sử dụng hàm decorator NgModule.
@NgModule({
declarations: [...],
imports: [...],
providers: [...],
bootstrap: [...],
})
export class AppModule {}
Code minh hoạ cách khai báo 1 module trong Angular
8
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
+ Directive: Directive là tất cả những loại cú pháp đặc biệt của Angular được đính kèm
lên DOM, qua đó, Angular có thể nhận biết và áp dụng các logic đặc biệt lên DOM
như data binding, DOM structuring,… có 3 lại directives trong Angular:
+ Component directives: cho phép gọi 1 component trực tiếp trong template của
1 component khác dễ dàng thông qua cú pháp quen thuộc của markup
language.
[max-stars]="5"
[value]="form.get('rating')!.value ?? 5"
class="col-12"
(on-value-change)="handleRatingChange($event)"
></select-star-rating>
Code minh hoạ sử dụng component directive “select-start-rating” trong HTML
+ Structural directives: loại directive dùng để thay đổi cấu trúc của DOM, ví dụ:
ngIf, ngSwitch, ngFor.
+ Attribute directives: loại direcive dùng để thuận tiện thay đổi, tuỳ chỉnh giá trị
của các html attribute theo cú pháp riêng. Một số attribute directive bao gồm:
ngStyle, ngClass.
+ Component: Là 1 đơn vị để xây dựng UI. Component bao gồm 1 template HTML để
thể hiện những thứ sẽ hiển thị lên UI, và 1 TypeScript class để xử lý logic cho
component đó. Để khởi tạo component class, ta dùng hàm decorator Component. Các
public field trong class này có thể được truy cập trực tiếp từ template. Khi các field
trong class thay đổi, component view cũng được tự động cập nhật theo. Đặc biệt, hàm
decorator Input cho phép tạo 1 field có thể nhận dữ liệu động từ component cha và
hàm decorator Output cho phép gửi các sự kiện đến component cha.
@Component({
selector: 'select-star-rating',
templateUrl: './select-star-rating.component.html',
styleUrls: ['./select-star-rating.component.css'],
providers: [
{ provide: MatFormFieldControl, useExisting: SelectStarRatingComponent },
],
})
export class SelectStarRatingComponent implements OnChanges {
@Input('max-stars') public maxStars: number = 5;
@Input('star-size') starSize: number = 30;
@Output('on-value-change') onValueChange = new EventEmitter
null>();
9
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
private _pointedValue: number | null = null;
private _value: number | null = null;
get value() { return this._value; }
@Input('value') set value(newValue) {
if (this.value !== newValue) this.onValueChange?.emit(newValue)
};
constructor() {
this._numberArray = this.createNumberArray(this.maxStars);
}
// ...
}
Code minh hoạ cách tạo class cho 1 component
+ Dependency Injection: Là design pattern chính được Angular sử dụng để khởi tạo
các thành phần trong chương trình. Để sử dụng được dependency injection, ta cần
đăng ký các class cần được khởi tạo vào module chịu trách nhiệm khởi tạo. Sau đó
Angular sẽ dựa vào constructor của từng class để cung cấp các đối tượng cần thiết cho
class đó.
+ Data binding: Là các cơ chế cập nhật dữ liệu tự động giữa view (mô tả bởi template)
và viewmodel (mô tả bởi class component). Angular có 3 kiểu data binding (bảng bên
dưới)
Loại
Cú pháp
Phân loại
{{expression}}
Interpolation
One-way từ data source lên
[target]="expression"
Property
view
Attribute
Class
Style
(target)="statement"
Event
One-way từ view về data
source
[(target)]="expression"
Two-way
Two-way
Bảng phân loại các loại data binding trong Angular
+ Pipe: là các hàm hỗ trợ thay đổi giá trị hoặc dạng hiển thị của dữ liệu thuận tiện ngay
trên template. Ngồi các pipe có sẵn của Angular, ta cũng có thể tạo một custom pipe
bằng hàm decorator Pipe.
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'flat',
10
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
})
export class FlatPipe implements PipeTransform {
transform(value: any[][], ...args: string[]): any[] {
return value.flat();
}
}
Code minh hoạ cách tạo pipe.
+ Service: Service là nơi đóng gói một số nghiệp vụ, chức năng liên quan đến nhau, qua
đó có thể tái sử dụng các hàm chức năng này ở nhiều component khác nhau thông qua
dependecy injection. Để khởi tạo một service, ta sử dụng hàm decorator Injectable.
@Injectable({
providedIn: 'root',
})
export class DataApiService {
constructor(
@Inject(String) protected url: string,
protected http: HttpClient,
protected tokenProvider: LocalstorageTokensProviderService
) {}
// ...
}
Code minh hoạ cách tạo ra 1 service
2.3.2. NgRx - state management framework
NgRx là 1 framework để quản lí trạng thái trong ứng dụng Angular một cách hiệu quả
vì cung cấp cho chúng ta các tác vụ như isolation of side effects, entity collection
management... Với NgRx, chúng ta có thể xây dựng 1 Angular app với khả năng duy trì và
mở rộng rất cao.
NgRx lấy cảm hứng từ Redux (một state management library cực kỳ phổ biến trong
cộng đồng React cho việc quản lý state theo Flux Architect) để giải quyết vấn đề tương tự
11
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
cho Angular. Ngoài ra, NgRx đưa Reactive programming vào thiết kế, kết hợp observer
pattern cùng với functional programming
+
+
+
+
+
Các thành phần của NgRx là:
Store: nơi chứa các State.
Action: thể hiện các hành động ,thao tác khi muốn thay đổi State
Reducer: thực việc chuyển đổi State từ trạng thái này sang trạng thái khác.
Selector: thể hiện vùng chọn của các State được lưu trữ trong Store
Effect: nơi thực hiện các side effect khi thay đổi state như call API
Quy trình hoạt động của nó được thể hiện bằng sơ đồ dưới đây
Sơ đồ hoạt động của việc quản lí state trong Angular với NgRx
2.3.3. ASP.NET Core
ASP.NET Core là một open-source framework đa nền tảng (cross-platform) cho việc
xây dựng những ứng dụng hiện đại dựa trên kết nối đám mây, giống như web apps, IoT và
backend cho mobile.
Ứng dụng ASP.NET Core có thể chạy trên môi trường .NET Core hoặc trên phiên bản
đầy đủ của .NET Framework. Nó được thiết kế để cung cấp và tối ưu development
12
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
framework cho những dụng cái mà được triển khai trên đám mây (clound) hoặc chạy onpromise.
Nó bao gồm các thành phần theo hướng module nhằm tối thiểu tài nguyên và chi phí
phát triển, như vậy bạn giữ lại được sự mềm giẻo trong việc xây dựng giải pháp của bạn. Ta
có thể phát triển và chạy những ứng dụng ASP.NET Core đa nền tảng trên Windows, Mac và
Linux.
+
+
+
+
+
+
+
Kiến trúc của ASP.NET thường bao gồm các phần sau:
Controller: định nghĩa các điểm gọi API của server.
Service: chứa các business logic, các hàm nghiệp vụ.
Repository: cung cấp 1 interface đơn giản để truy vấn dữ liệu.
Data Context: chứa các ràng buộc, khai báo cơ sở dữ liệu (thông qua data
annotation hoặc fluent API) và đại diện cho cơ sở dữ liệu cho repository.
Unit of Work: tập hợp các repository nhằm đồng bộ dữ liệu trên cùng 1 data context.
Model: Bao gồm các class định nghĩa dữ liệu.
Data transfer object: Bao gồm các class định nghĩa dữ liệu nhập xuất (request
models và response models).
2.4. Review code và nộp sản phẩm cuối khoá
●
●
+
+
●
+
Thời gian: 1 ngày
Nội dung chính:
Được các senior review và góp ý trên sản phẩm đã làm.
Nộp sản phẩm cuối cùng.
Kết quả
Bài làm được đánh giá tốt và đã sẵn sàng tham gia dự án chính thức.
13
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
CHƯƠNG 3 - CHI TIẾT VỀ PROJECT
3.1
Giới thiệu về dự án
3.1.1 Tổng quát
Tên dự án: Product management
Yêu cầu:
Yêu cầu về backend tại dự án luyện tập
-
Xây dựng 1 website cho phép người dùng (VD: người bán hàng) quản lý các sản
phẩm của họ. Một sản phẩm thuộc về tối đa 1 nhà cung cấp (supplier) và có thể thuộc
nhiều phân loại (category) khác nhau. Ngoài ra website cũng cần cung cấp hệ thống
authentication và authorization, phân quyền người dùng cho các chức năng tạo/sửa
sản phẩm.
-
Yêu cầu về tech stack:
o Back end: ASP.NET Core, JWT, Entity framework, SQL Server.
o Front end: Angular 2+, NgRx, Angular Material, Bootstrap.
3.1.2 Một số chức năng chính
+ Create a product: Thêm 1 sản phẩm mới (người dùng cần đăng nhập).
+ Search products: Tìm kiếm sản phẩm.
+ Edit a product: Chỉnh sửa 1 sản phẩm (người dùng cần đăng nhập).
+ Delete a product: Xoá 1 sản phẩm. (người dùng cần đăng nhập)
+ Register account: Đăng ký tài khoản người dùng mới.
+ Sign in: Đăng nhập bằng 1 tài khoản đã tạo.
14
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
+ Sign out: Đăng xuất khỏi tài khoản đã đăng nhập
+ Guard routes: Phân quyền truy cập đối với một số trang (VD: trang tạo/chỉnh sửa
sản phẩm).
Và một số chức năng khác.
3.2 Sản phẩm hoàn chỉnh
Form đăng ký tài khoản
Form đăng nhập
15
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
Trang danh sách và tìm kiếm sản phẩm
16
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
Form nhập và chỉnh sửa sản phẩm
17
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
CHƯƠNG 4 - TỔNG KẾT
Đối với cá nhân em, 3 tháng thực tập ở cơng ty đầu tiên của mình đã là một trải
nghiệm thú vị, và đây cũng chính là hành trang quý báu trước khi chính thức bước chân vào
sự nghiệp lập trình của mình. Em cảm thấy thật may mắn khi quý công ty FPT Software đã
cho em cơ hội được ở lại và đóng góp vào các dự án của công ty với tư cách là một người
nhân viên chính thức.
Về kiến thức tích luỹ được, kỳ thực tập này đã cho em cơ hội được học tập và sử dụng
các công nghệ hiện đại theo xu hướng thị trường, bao gồm Angular 2+ và ASP.NET Core.
Tuy chưa có quá nhiều kinh nghiệm làm việc thực tế, nhưng với lượng kiến thức sẵn có, em
có thể nói mình đã sẵn sàng bước chân vào một dự án chính thức!
Bên cạnh đó, yếu tố con người cũng hết sức quan trọng trong quá trình phát triển bản
thân của em tại đây. Lời đầu tiên em xin cảm ơn anh project manager Trần Việt Hùng đã đưa
ra những định hướng học tập và theo dõi quá trình rèn luyện của em, cũng chính là người đã
tin tưởng và giao cho em một vị trí làm việc chính thức. Em cũng biết ơn anh Nguyễn Thanh
Tùng – trainer chính thức của em, anh Tùng đã không ngại dành ra nửa tiếng mỗi ngày để
đưa ra những lời nhận xét, góp ý bổ ích cho từng cá nhân được phát triển về cả kỹ năng và tư
duy lập trình. Cuối cùng, em xin cảm ơn tất cả những bạn trainee cùng khố đã cùng tạo ra
một mơi trường học tập lành mạnh và không ngại giúp đỡ lẫn nhau.
Em cũng xin chia sẻ một số hạn chế và khó khăn sau kỳ thực tập. Em cho rằng việc
phải làm việc online do dịch bệnh chính là một điều thiệt thịi to lớn. Điều này tạo ra rào cản
khi em cần trao đổi trực tiếp với mọi người trong công ty, do đó, mọi người chưa thực sự xây
dựng được sự gắn kết đối với nhau. Bên cạnh đó, việc liên tục bổ sung kiến thức mới đã từng
khiến thời gian làm việc của em không cân bằng. Em cho rằng nguyên do là sự thiếu kinh
nghiệm của bản thân, song em vẫn tự tin rằng mình có thể cải thiện điều này trong tương lai.
Em xin chân thành cảm ơn quý thầy cô khoa Công nghệ phần mềm đã dành thời gian
đọc bài báo cáo này của em. Em rất mong được lắng nghe và ghi nhận những góp ý và chia
sẻ từ quý thầy cô. Em xin kết thúc bài báo cáo của mình ở đây ạ!
18
Quản Tiến Nghĩa - 18520111 - Thực tập tốt nghiệp
TÀI LIỆU THAM KHẢO
[1] Agile Manifesto, />[2] Angular - The Complete Guide, Udemy course: />[3] Material document: />[4] Angular document: />[5] NgRx document: />
19