Skip to content

Commit

Permalink
#issue42
Browse files Browse the repository at this point in the history
  • Loading branch information
quocanh1897 authored and phamtai97 committed Aug 16, 2019
1 parent e4259e7 commit ebdd348
Show file tree
Hide file tree
Showing 15 changed files with 197 additions and 204 deletions.
97 changes: 47 additions & 50 deletions SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,54 +2,51 @@

* [Giới thiệu](README.md)
* [Chương 1: Nền tảng ngôn ngữ Go](ch1-basic/README.md)
* [1.1 Nguồn gốc của ngôn ngữ Go](ch1-basic/ch1-01-genesis.md)
* [1.2 Sự tiến hóa của chương trình "Hello World"](ch1-basic/ch1-02-hello-revolution.md)
* [1.3 Array, strings và slices](ch1-basic/ch1-03-array-string-and-slice.md)
* [1.4 Functions, Methods và Interfaces](ch1-basic/ch1-04-func-method-interface.md)
* [1.5 Điều khiển tuần tự cấu trúc vùng nhớ](ch1-basic/ch1-05-mem.md)
* [1.6 Các chế độ đồng thời thông dụng](ch1-basic/ch1-06-common-concurrency-mode.md)
* [1.7 Error và Exceptions](ch1-basic/ch1-07-error-and-panic.md)
* [1.8 Ghi chú bổ sung](ch1-basic/ch1-08-supplementary-notes.md)
* [1.1 Nguồn gốc của ngôn ngữ Go](ch1-basic/ch1-01-genesis.md)
* [1.2 Sự tiến hóa của chương trình "Hello World"](ch1-basic/ch1-02-hello-revolution.md)
* [1.3 Array, strings và slices](ch1-basic/ch1-03-array-string-and-slice.md)
* [1.4 Functions, Methods và Interfaces](ch1-basic/ch1-04-func-method-interface.md)
* [1.5 Concurrent-oriented memory model](ch1-basic/ch1-05-mem.md)
* [1.6 Concurrency Mode](ch1-basic/ch1-06-common-concurrency-mode.md)
* [1.7 Error và Exceptions](ch1-basic/ch1-07-error-and-panic.md)
* [1.8 Ghi chú bổ sung](ch1-basic/ch1-08-supplementary-notes.md)
* [Chương 2: Lập trình CGO](ch2-cgo/README.md)
* [2.1 Quick Start](ch2-cgo/ch2-01-quick-start.md)
* [2.2 CGO Foundation](ch2-cgo/ch2-02-CGO-foundation.md)
* [2.3 Chuyển đổi kiểu](ch2-cgo/ch2-03-type-conversion.md)
* [2.4 Lời gọi hàm](ch2-cgo/ch2-04-function-call.md)
* [2.5 Cơ chế bên trong CGO](ch2-cgo/ch2-05-internal-mechanisms.md)
* [2.6 Quick Sort](ch2-cgo/ch2-06-qsort.md)
* [2.7 Mô hình bộ nhớ CGO](ch2-cgo/ch2-07-cgo-mem.md)
* [2.8 C++ Class Packaging](ch2-cgo/ch2-08-c-class.md)
* [2.9 Thư viện tĩnh và động](ch2-cgo/ch2-09-static-shared-lib.md)
* [2.10 Biên dịch và liên kết các tham số](ch2-cgo/ch2-10-link.md)
* [2.11 Ghi chú bổ sung](ch2-cgo/ch2-11-ext.md)
* [Chương 3: Go Best Practices](ch3-best-practice/README.md)
* [Chương 4: RPC và Protobuf](ch4-rpc/README.md)
* [4.1 Bắt đầu với RPC](ch4-rpc/ch4-01-rpc-intro.md)
* [4.2 Protobuf](ch4-rpc/ch4-02-pb-intro.md)
* [4.3 RPC trong Golang](ch4-rpc/ch4-03-fun-fpc.md)
* [4.4 Bắt đầu với gRPC](ch4-rpc/ch4-04-grpc.md)
* [4.5 gRPC Nâng cao](ch4-rpc/ch4-05-grpc-advanced.md)
* [4.6 gRPC và Protobuf extensions](ch4-rpc/ch4-06-grpc-ext.md)
* [4.7 pbgo : Protobuf-based framework](ch4-rpc/ch4-07-pbgo.md)
* [4.8 grpcurl tool](ch4-rpc/ch4-08-grpc-curl.md)
* [4.9 Ghi chú bổ sung](ch4-rpc/ch4-09-supplementary-notes.md)
* [Chương 5: Go và Web](ch5-web/README.md)
* [5.1 Giới thiệu về Web Development](ch5-web/ch5-01-introduction.md)
* [5.2 Routing](ch5-web/ch5-02-router.md)
* [5.3 Middleware](ch5-web/ch5-03-middleware.md)
* [5.4 Kiểm tra yêu cầu validator](ch5-web/ch5-04-request-verification.md)
* [5.5 Database và giao tiếp với Database](ch5-web/ch5-05-database.md)
* [5.6 Ratelimit Service Flow Limit](ch5-web/ch5-06-service-flow-limitation.md)
* [5.7 Bố cục thông thường của các dự án web lớn](ch5-web/ch5-07-layout-of-web-project.md)
* [5.8 Interface và Table Driven Development](ch5-web/ch5-08-interface-and-web.md)
* [5.9 Grayscale Publishing and A/B test](ch5-web/ch5-09-gated-launch.md)
* [5.10 Ghi chú bổ sung](ch5-web/ch5-10-ext.md)
* [Chương 6: Hệ thống phân tán](ch6-cloud/README.md)
* [6.1 Distributed id generator](ch6-cloud/ch6-01-dist-id.md)
* [6.2 Distributed lock](ch6-cloud/ch6-02-lock.md)
* [6.3 Hệ thống tác vụ có trì hoãn](ch6-cloud/ch6-03-delay-job.md)
* [6.4 Công cụ tìm kiếm phân tán](ch6-cloud/Ch6-04-search-engine.md)
* [6.5 Cân bằng tải](ch6-cloud/ch6-05-load-balance.md)
* [6.6 Quản lý cấu hình trong hệ thống phân tán](ch6-cloud/ch6-06-config.md)
* [6.7 Trình thu thập thông tin phân tán](ch6-cloud/ch6-07-crawler.md)
* [6.8 Phần mở rộng](ch6-cloud/ch6-08-ext.md)
* [2.1 Quick Start](ch2-cgo/ch2-01-quick-start.md)
* [2.2 CGO Foundation](ch2-cgo/ch2-02-CGO-foundation.md)
* [2.3 Chuyển đổi kiểu](ch2-cgo/ch2-03-type-conversion.md)
* [2.4 Lời gọi hàm](ch2-cgo/ch2-04-function-call.md)
* [2.5 Cơ chế bên trong CGO](ch2-cgo/ch2-05-internal-mechanisms.md)
* [2.9 Thư viện tĩnh và động](ch2-cgo/ch2-09-static-shared-lib.md)
* [2.10 Biên dịch và liên kết các tham số](ch2-cgo/ch2-10-link.md)
* [2.11 Ghi chú bổ sung](ch2-cgo/ch2-11-ext.md)
* [Chương 3: RPC và Protobuf](ch3-rpc/README.md)
* [3.1 Bắt đầu với RPC](ch3-rpc/ch3-01-rpc-intro.md)
* [3.2 Protobuf](ch3-rpc/ch3-02-pb-intro.md)
* [3.3 RPC trong Golang](ch3-rpc/ch3-03-fun-fpc.md)
* [3.4 Bắt đầu với gRPC](ch3-rpc/ch3-04-grpc.md)
* [3.5 gRPC Nâng cao](ch3-rpc/ch3-05-grpc-advanced.md)
* [3.6 gRPC và Protobuf extensions](ch3-rpc/ch3-06-grpc-ext.md)
* [3.7 pbgo : Protobuf-based framework](ch3-rpc/ch3-07-pbgo.md)
* [3.8 grpcurl tool](ch3-rpc/ch3-08-grpc-curl.md)
* [3.9 Ghi chú bổ sung](ch3-rpc/ch3-09-supplementary-notes.md)
* [Chương 4: Go và Web](ch4-web/README.md)
* [4.1 Giới thiệu về Web Development](ch4-web/ch4-01-introduction.md)
* [4.2 Routing](ch4-web/ch4-02-router.md)
* [4.3 Middleware](ch4-web/ch4-03-middleware.md)
* [4.4 Validator request check](ch4-web/ch4-04-request-verification.md)
* [4.5 Database và giao tiếp với Database](ch4-web/ch4-05-database.md)
* [4.6 Ratelimit Service Flow Limit](ch4-web/ch4-06-service-flow-limitation.md)
* [4.7 Bố cục thông thường của các dự án web lớn](ch4-web/ch4-07-layout-of-web-project.md)
* [4.8 Interface và Table Driven Development](ch4-web/ch4-08-interface-and-web.md)
* [4.9 Grayscale Publishing and A/B test](ch4-web/ch4-09-gated-launch.md)
* [4.10 Ghi chú bổ sung](ch4-web/ch4-10-ext.md)
* [Chương 5: Hệ thống phân tán](ch5-cloud/README.md)
* [5.1 Distributed id generator](ch5-cloud/ch5-01-dist-id.md)
* [5.2 Distributed lock](ch5-cloud/ch5-02-lock.md)
* [5.3 Hệ thống tác vụ có trì hoãn](ch5-cloud/ch5-03-delay-job.md)
* [5.4 Công cụ tìm kiếm phân tán](ch5-cloud/Ch5-04-search-engine.md)
* [5.5 Cân bằng tải](ch5-cloud/ch5-05-load-balance.md)
* [5.6 Quản lý cấu hình trong hệ thống phân tán](ch5-cloud/ch5-06-config.md)
* [5.7 Trình thu thập thông tin phân tán](ch5-cloud/ch5-07-crawler.md)
* [5.8 Phần mở rộng](ch5-cloud/ch5-08-ext.md)
* [Chương 6: Go Best Practices](ch6-best-practice/README.md)
8 changes: 4 additions & 4 deletions ch4-web/ch4-04-request-verification.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ Có lẽ bạn đã bắt gặp đâu đó tấm hình mà mọi người dùng
<img src="../images/ch5-04-validate.jpg">
<br/>
<span align="center">
<i>Hadouken if-else</i>
<i>'Hadouken' if-else</i>
</span>
</div>
<br/>

Thực tế đây là một trường hợp không liên quan gì tới ngôn ngữ mà chỉ là cách tổ chức code rườm rà khi gặp trường hợp mà nhiều field cần phải validate.

Trong phần này chúng ta sẽ dùng Go để viết một ví dụ validate và
Trong phần này chúng ta sẽ dùng Go để viết một ví dụ validate và xem xét cải tiến nó theo 2 bước. Cuối cùng là phân tích cơ chế để hiểu rõ hơn cách một validator hoạt động.

## 4.4.1 Cải tiến 1: Tái cấu trúc hàm validation

Expand Down Expand Up @@ -53,7 +53,7 @@ func register(req RegisterReq) error{
}
```

Giờ code của chúng ta có vẻ khá giống một *Hadouken* nhắc ở phần đầu rồi, vậy làm thế nào để tối ưu đoạn code trên?
Giờ code của chúng ta có vẻ khá giống một *"Hadouken"* nhắc ở phần đầu rồi, vậy làm thế nào để tối ưu đoạn code trên?

Có một giải pháp đã được đưa ra trong [Refactoring.com - Guard Clauses](https://refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html), thử áp dụng cho trường hợp của chúng ta:

Expand Down Expand Up @@ -87,7 +87,7 @@ Có một cách giúp chúng ta giảm khá nhiều code là sử dụng validat
## 4.4.2 Cải tiến 2: Sử dụng validator

<div align="center">
<img src="../images/validator.png" width="200">
<img src="../images/validator.png" width="100">
<br/>

</div>
Expand Down
Loading

0 comments on commit ebdd348

Please sign in to comment.