You are on page 1of 19

Contents

1. Design System.........................................................................................................................1

Về tích hợp hệ thống legary và các vấn đề nonblocking, thì bạn Phương có kinh nghiệm
chưa nhiều và chưa có hệ thống về các cách protocol kết nối. Bạn mới chỉ quen với API
nhưng các kiểu tích hợp như ESB thì chưa có thời gian đào sâu.

1. PROTOCOL LÀ GÌ VÀ CÁC LOẠI PROTOCOL PHỔ BIẾN HIỆN NAY

TCP/IP/HTTP/HTTPS/FTP/SSH/SMTP/DNS/POP 3/IMAP

https://tltvietnam.vn/protocol-la-gi-va-cac-loai-protocol-pho-bien-
hien-nay.html

Protocol là một tiêu chuẩn được sử dụng để định nghĩa một phương
thức trao đổi dữ liệu qua mạng máy tính, như là local area network
(LAN), Internet, Intranet,… Mỗi protocol có những phương thức định
dạng dữ liệu riêng khi được gửi và cần phải làm những gì một khi nó
nhận dữ liệu, các dữ liệu được nén lại hay cách kiểm tra lỗi dữ liệu.

Giao thức phổ biến và quan trọng nhất hiện nay trong thế giới internet
là TCP (transmission control protocol/internet protocol) được sử dụng
để trao đổi thông tin liên lạc giữa các máy tính được kết nối internet.
Giao thức HTTP (Hypertext Transfer Protocol) được sử dụng để truyền
dữ liệu qua www hay world wide web (Internet), được truyền bởi
TCP/IP.

Cách thức hoạt động của protocol là gì ?

 Toàn bộ các hoạt động truyền dữ liệu trên mạng đều được chia
thành nhiều bước riêng biệt bao gồm cả hệ thống. Ở mỗi bước thì lại
có một số hoạt động được diễn ra và người dùng sẽ không thể biết
được nó diễn ra ở bất kỳ bước nào khác. Mỗi bước sẽ có những
nguyên tắc và giao thức riêng như sau:
 Tất cả các bước phải được thực hiện theo một trình tự nhất định
giống nhau trên mỗi máy tính mạng. Đối với những bước ở máy tính
gửi thì phải được thực hiện từ trên xuống dưới, còn ở máy tính nhận
thì chúng sẽ phải được thực hiện từ dưới lên
2. Blocking và Non-Blocking
Phần phía trên miêu tả sự hoạt động theo cơ chế Blocking mà ở đây mặc dù không có sự liên đới giữa 3 việc, nhưng
các công việc tiếp sau luôn phải chờ công việc phía trước thực sự xong rồi mới có thể bắt đầu thực hiện. Các bước
sẽ được mô tả như dưới đây

1. Hàm dataSync1.get() được gọi để lấy dữ liệu, vì nó là Blocking nên trước khi công việc này
hoàn thành các việc tiếp sau sẽ phải đợi
2. Hàm printData(d1) được gọi để in dữ liệu lấy về từ dataSync1.get(), tương tự nó cũng
là Blocking
3. Hàm dataSync2.get() được gọi để lấy dữ liệu, mặc dùng là nó không liên quan gì đến hai
dòng lệnh trên, nhưng đến tận bây giờ nó mới được thực hiện và là Blocking nên chiếm một
khoảng thời gian xử lý nữa
4. Hàm printData(d2) được gọi để in dữ liệu lấy về từ dataSync2.get(), là Blocking
5. Hàm dataSync3.get() được gọi để lấy dữ liệu, là Blocking
6. Hàm printData(d3) được gọi để in dữ liệu lấy về dataSync3.get(), là Blocking
Ở phần này, mọi thao tác đều là blocking nên thời gian để thực hiện xong hết các thao tác sẽ bằng tổng thời gian của
từng thao tác.

Phía dưới là phần thể hiện việc làm tất cả những việc trên, các thao tác in dự
liệu printData(d1), printData(d2), printData(d3) vẫn là các thao tác Blocking nhưng ở đây có sự
tham gia của Non-Blocking trong các thao tác lấy dữ
liệu dataAsync1.get(), dataAsync2.get(), dataAsync3.get(). Các thao tác Non-Blocking sẽ được
bắt đầu gần như ngay lập tức và không cần phải chờ các thao tác phía trước thực hiện xong. Sau khi có kết quả các
thao tác Non-Blocking sẽ gọi lại callback để in kết quả trả về ra màn hình. Cụ thể sẽ được diễn giải như ở dưới đây:
1. Hàm dataAsync1.get() được gọi để lấy dự liệu, vì nó là Non-Blocking nên quá trình thực
thi sẽ không phải dừng ở đây mà tiếp tục thực hiện dòng lệnh tiếp sau gần như ngay lập tức, tất
nhiên vẫn phải sau khi đăng ký một callback để in ra dữ liệu trả về từ dataAsync1.get().
2. Như nói ở trên, ngay sau đó, hàm dataAsync2.get() được gọi cùng với đăng ký callback. Vì
là Non-Blocking nên quá trình cũng giống như trên.
3. Tiếp theo hàm dataAsync3.get() cũng được thực hiện tương tự. Đến đây, 3 hàm gọi để lấy
dữ liệu gần như được thực hiện đồng thời mà không cần phải chờ nhau.
4. Trong khi hàm dataAsync1.get() và dataAsync3.get() đang thực hiện thì
hàm dataAsync2.get() đã lấy được dữ liệu về, lúc này callback được gọi để in dữ liệu đó ra
màn hình, trong callback lúc này printData(d2) được gọi và nó là Blocking.
5. Trong thời gian printData(d2) đang thực hiện, dataAsync1.get() đã hoàn tất việc lấy
dữ liệu, callback của nó được gọi tuy nhiên vì printData(d2) là Blocking và đang thực hiện
nên việc thực hiện printData(d1) sẽ phải chờ.
6. Cũng tương tự như trên, dataAsync3.get() cũng hoàn tất việc lấy dữ liệu, callback của nó
được gọi, lần này printData(d3) không những phải chờ printData(d2) như trên mà nó
còn phải chờ thêm cả printData(d1) bởi vì printData(d1) cũng là Blocking. Sau khi
cả printData(d2) và printData(d1) được hoàn thành thì printData(d3) được thực
hiện và toàn bộ quá trình hoàn tất.
Bây giờ nhìn lại hình vẽ một lần nữa ta có thể thấy Non-Blocking rút ngắn thời gian thực hiện chương trình hơn là
Blocking, việc rút ngắn thời gian này không phải vì các công việc được thực hiện nhanh hơn mà vì nhiều việc được
thực hiện cùng một lúc hơn.

3. Giới thiệu.
Ngày nay, khi sự phát triển vươn tới những đỉnh cao mới, nhu cầu về làm chủ tri thức của
con người được đặt lên hàng đầu. Do đó, thông tin dữ liệu cần phải được dễ dàng truy
xuất, độ tin cậy, tính chính xác cao và luôn luôn sẵn sàng phục vụ. Theo thời gian, sự
phát triển về công nghệ và nhu cầu của con người đã xuất hiện những hệ thống hoạt động
và trao đổi dữ liệu theo những kiến trúc mới và đặt ra thách thức là các kiến trúc mới này
cần trao đổi dữ liệu và có thể phối hợp nhịp nhàng với những hệ thống cũ. Do đó người ta
đã đưa ra giải pháp tích hợp hệ thống để giải quyết vấn đề này.

3.1. Khái niệm tích hợp hệ thống.


Vậy Tích hợp hệ thống là quá trình liên kết, kết nối các hệ thống thông tin, cả về khía
cạnh chức năng lẫn hạ tầng tính toán, để hoạt động như một thể thống nhất. [1]

3.2. Mục tiêu và thách thức.


 Mục tiêu:
Tích hợp hệ thống giúp chúng ta có thể truy xuất được đúng dữ liệu cần thiết từ đúng hệ
thống cần tìm, trong đúng thời điểm mong muốn với chất lượng tuyệt đối và chi phí thấp
nhất.
 Thách thức của tích hợp hệ thống.
Việc thiết kế thường độc lập và thường theo kiểu “nghĩ đến đâu làm đến đấy”, dó đó
thường rất khó để kết hợp những thành phần nhỏ để giải quyết bài toán chung. Hơn nữa,
các ứng dụng như dịch vụ Web, ứng dụng cho hệ điều hành Windows, Linux… được
phát triển bởi nhiều ngôn ngữ khác nhau cũng như phương thức quản lý dữ liệu khác
nhau. Việc vượt qua những điểm khác biệt này để tích hợp các thành phần thành một hệ
thống là điều khá khó khăn.

3.3. Kiểu tích hợp.

4. Kiến trúc tích hợp hệ thống


4.1. Kiến trúc Point-to-Point

4.2. Kiến trúc Hub-and-Spoke

4.3. Kiến trúc Pipeline


4.4. Kiến trúc hướng dịch vụ SOA.

4.5.

5. Công nghệ tích hợp


5.1. Chia sẻ cơ sở dữ liệu
5.2. Message-oriented middleware

5.3. Remote Procedure Calls

5.4. Object Request Brokers


5.5. Máy chủ ứng dụng
5.6. Dịch vụ web
5.7. Trục tích hợp dịch vụ tổng thể (Enterprise Service Buses).
ESB là một cơ sở hạ tầng phần mềm hoạt động như là một lớp trung gian middleware để
giải quyết các yêu cầu mở rộng hệ thống mà dịch vụ web không làm được, ví dụ như tích
hợp giữa các dịch vụ web với các ứng dụng middleware khác, cũng như giải quyết các
vấn đề về an ninh, quản lý, kiểm soát các dịch vụ truyền thông. ESB giải quyết các vấn
đề trên, đồng thời nó tăng tính linh hoạt trong giao tiếp giữa các dịch vụ, làm đơn giản
hóa việc tái sử dụng các dịch vụ. ESB cung cấp cơ sở hạ tầng truyền thông mạnh mẽ,
đáng tin cậy, an toàn, khả năng mở rộng giữa các dịch vụ, khả năng kiểm soát truyền
thông và kiểm soát việc sử dụng các dịch vụ. ESB cung cấp khả năng định tuyến để điều
hướng các thông điệp tới các dịch vụ khác nhau dựa trên nội dung, nguồn gốc, hoặc các
thuộc tính khác và khả năng chuyển đổi để biến đổi thông điệp trước khi chúng được
truyền tới đích. ESB cung cấp kiểm soát việc triển khai, sử dụng và bảo trì dịch vụ. Ngoài
ra nó còn cho phép kiểm soát, cân bằng tải, tối ưu hiệu năng, triển khai phân tán, ước tính
chi phí dịch vụ, cấu hình trực tuyến v.v…

II. TÍCH HỢP DỊCH VỤ DỰA TRÊN CÔNG NGHỆ ESB


1. Khái niệm trục dịch vụ tổng thể ESB.

1.1. Khái niệm ESB và Middleware


Middleware là phần mềm máy tính với nhiệm vụ kết nối các thành phần phần mềm hoặc các ứng
dụng với nhau. Phần mềm loại này bao gồm một tập các dịch vụ cho phép sự tương tác giữa các
tiến trình chạy trên một hoặc nhiều máy khác nhau. ESB là một kiến trúc phần mềm trung gian
(middleware) dựa trên phương thức truyền thông điệp, nó cung cấp một cơ sở hạ tầng tích hợp
phục vụ cho các dịch vụ định tuyến, gửi và nhận phản hồi yêu cầu để tạo điều kiện thuận lợi cho
việc tương tác giữa các ứng dụng một cách an toàn, tin cậy và hiệu quả cao
1.2. Kiến trúc cơ bản ESB
Mô-đun vận hành và quản lý (Operations and
Management)
Mô-đun này bao gồm những chức năng hỗ trợ việc vận hành và quản lý
trục tích hợp. Những chức năng chính của mô-đun này là:

 Thống kê và trạng trái (Statistic & status): Thành phần này cung cấp
những thống kê về về những dịch vụ được tích hợp của ESB như số
lượng lỗi, độ trễ khi xử lý thông điệp, số lượng lỗi…
 Cảnh báo (Alert): Cung cấp cơ chế gửi cảnh báo thông qua các kênh
khác nhau để thuận tiện cho việc giám sát hoạt động của trục tích
hợp.
 Cân bằng tải (Load balancing): Một endpoint (điểm cuối) có thể có
trên nhiều hệ thống vật lý khác nhau, thành phần cân bằng tải này
có thể giúp cho việc gọi tới endpoint này được san đều ra giữa các
endpoint vật lý. Thành phần cân bằng tải này thường được triển khai
theo thuật toán Round Robin có trọng số.
 Giới hạn thông điệp (Message Throttling): Việc giới hạn số lượng
thông điệp gửi tới server trong một khoảng thời gian là một điều cần
làm để việc hệ thống bị quá tải.
 Quản lý cấu hình: Cho phép điều chỉnh cấu hình của ESB một cách
an toàn trên hệ điều hành, ngoài ra nó còn có thể lưu lại lịch sử
chỉnh sửa để có thể khôi phục ESB về trạng thái trước đó đề phòng
trường hợp cấu hình không phù hợp gây ra lỗi hệ thống.

Mô-đun phân giải (Mediation)


Chúng ta có thể coi đây là mô-đun cốt lõi của ESB, mô-đun này bao gồm
những chức năng cần thiết để thiết lập luồng thông điệp của ESB sao cho
phù hợp với bài toán nghiệp vụ của doanh nghiệp.

 Định tuyến thông điệp (Message Routing): Định tuyến thông điệp tới
đúng dịch vụ mà chúng cần tới dựa vào tiêu đề (header), nội dung và
giao thức của thông điệp.
 Chuyển đổi thông điệp (Message tranformation): Cho phép chuyển
đổi định dạng thông điệp từ dạng này sang dạng khác, ví dụ như từ
kiểu XML sang JSON, từ dạng text sang nhị phân và ngược lại.
 Chuyển dịch giao thức (Protocol Translation): Khả năng chuyển đổi
từ một giao thức truyền thông này này sang một giao thức truyền
thông khác, ví dụ như từ FTP sang HTTP.
 Xác nhận thông điệp (Message Validation): Có khả năng đảm bảo
thông điệp là hợp lệ, ví dụ như trong trường hợp định dạng là JSON,
chúng ta cần đảm bảo rằng nội dung của thông điệp đúng với cú
pháp của định dạng này.
 Giao dịch (Transaction): Tương tự như khái niệm về Transaction của
hệ quản trị cơ sở dữ liệu quan hệ, ESB cung cấp cho chúng ta sự
toàn vẹn trong việc xử lý thông điệp. Nếu như trong luồng xử lý
thông điệp, một tiến trình xử lý bị lỗi thì toàn bộ quá trình sẽ được
huỷ bỏ và khôi phục về như ban đầu.

Mô-đun bảo mật (Security)


Mô-đun này hỗ trợ bảo mật ở cả tầng thông điệp và tầng vận chuyển với
các thành phần:

 Xác thực (Authentication): Xác thực người dùng khi truy cập tới dịch
vụ được tích hợp vào ESB.
 Uỷ quyền (Authorization): Cung cấp chức năng uỷ quyền thiết lập
ESB cho người quản trị hoặc phân theo vai trò của người quản trị.
 Mã hoá và giải mã (Encryption): Cung cấp chức năng mã hoá và giải
mã thông điệp.

Mô-đun điều hợp, vận chuyển (Adapters/Transport)


Mô-đun này bao gồm các bộ điều hợp (adapters) giúp kết nối tới các dịch
vụ được ESB cung cấp thông qua mô-đun Services Hosting. Tất cả yêu cầu
đi vào và đi ra đều phải thông qua adapter. Adapter cho phép ESB tương
tác với nhiều cơ chế đầu ra. Thường thì ESB sẽ cung cấp sẵn các bộ điều
hợp để thuận tiện cho việc kết nối các dịch vụ, các adapter này có thể được
sử dụng để dành cho việc giao tiếp với các ứng dụng phổ biến như là
Enterprise Resource Planning (ERP), Supply Chain Management (SCM) và
Customer Relationship Management (CRM) [2], ngoài ra người sử dụng
hoặc bên thứ ba có thể tự phát triển những bộ điều hợp để phù hợp với
nghiệp vụ của tổ chức.

Một vài ESB phổ biến hiện nay

Mule ESB
Là một Java-based ESB được phát triển bởi Mulesoft. So với các ESBs khác
thì Mule rất nhẹ nhưng nó đem lại khả năng mở rộng cao, cho phép người
dùng có thể bắt đầu với những tích hợp nhỏ và tăng dần số lượng lên theo
thời gian một cách dễ dàng. Các công nghệ chính được sử dụng trong Mule
ESB:

 AMQP (Advanced Message Queuing Protocol): Giao thức hàng đợi


thông điệp được Mulesoft tuỳ biến từ RabbitMQ Java Client.
 Routers: Mule ESB sử dụng các bộ định tuyến để chỉnh sửa, sắp xếp,
đánh giá và chuyển phát thông điệp.
 Anypoint Connectors: Các bộ kết nối có sẵn của Mule giúp kết nối tới
các giao thức, databases, các public API của bên thứ ba phổ biến
như Salesforces, Google...Ta có thể tự tạo các connectors nếu cần
thiết.
 Mule Runtime Engine: là thành phần chính của Mule ESB, nó giúp
tích hợp các ứng dụng, hệ thống và các APIs
 Mule Runtime Manager: Cho phép quản lý việc triển khai, theo dõi
ESB.

Oracle ESB
Là một ESB được phát triển bởi Oracle, là phiên bản dựa trên sản phẩm
trước đó của hãng này là Retail Integration Bus Essentials. Oracle ESB được
tối ưu để tích hợp các dịch vụ được cung cấp bởi Oracle, ngoài ra nó cũng
vẫn có thể tích hợp được các ứng dụng của bên thứ ba khác. Các công
nghệ chính được sử dụng trong Oracle ESB:

 Oracle Message Broker: là một hệ thống quản lý thông điệp viết


bằng Java giúp dễ dàng làm việc với các hệ thống hàng đợi thông
điệp như AQ, IBM MQSeries và TIBCo Redezvous.
 Routing Service: các dịch vụ định tuyến kiểu SOA cho phép các quy
tắc định tuyến được định nghĩa và publish với một ngôn ngữ đặc tả
dịch vụ web – WSDL (Web Sevice Description Language).
 Integration Adapter: các bộ điều hợp có sẵn giúp giao tiếp với các
databases, hàng đợi thông điệp và các giao thức khác nhau.
 ESB server: máy chủ để chạy ESB, nó có thể lắng nghe các thay đổi
của ESB để cập nhật theo thời gian thực.
 ESB control: cho phép thay đổi và quản lý ESB, nó sẽ tương tác với
ESB server để các thay đổi này có hiệu lực ngay trong thời gian thực.

Red Hat Jboss Fuse


Về Red Hat Jboss Fuse (nay là Red Hat Fuse) thì nó không hẳn là một ESB
mà là một nền tảng tích hợp dựa trên ESB mã nguồn mở Apache
ServiceMix. Fuse cho phép việc tích hợp phân tán dựa trên quy trình Agile
và cung cấp khả năng triển khai rất mạnh mẽ trên cloud hoặc on-premise
dựa trên công nghệ Containers.

References:

6. Về tích hợp hệ thống legary


https://vi.itpedia.nl/2019/06/20/legacy-systemen-waarom-gebruiken-we-ze-nog/
https://vi.wikipedia.org/wiki/H%E1%BB%87_th%E1%BB%91ng_k%E1%BA
%BF_th%E1%BB%ABa
https://vi.itpedia.nl/2019/06/20/legacy-systemen-waarom-gebruiken-we-ze-nog/

Chúng ta thường bắt gặp thuật ngữ Legacy trong một quá trình chuyển đổi, ví dụ
khi chuyển dữ liệu từ hệ thống cũ sang cơ sở dữ liệu mới.

Thêm thông tin cơ bản về các hệ thống Legacy


Các hệ thống kế thừa đôi khi quá cũ nên chúng hầu như không cần bảo trì. Hệ
thống đã được phát triển hoàn chỉnh và các lập trình viên đã nghỉ hưu. Kiến thức
về ngôn ngữ lập trình hầu như không có sẵn trên thị trường và không cần các bản
vá và thay đổi phức tạp. Các hệ thống cũ thường không tương thích với các hệ
thống mới mua. Điều này có nghĩa là chúng ta phải lập trình các liên kết với các
loại hệ thống này dựa trên giao diện hiện có. Chúng tôi thường sử dụng kỹ thuật
chuyển đổi để điều chỉnh phần mềm.

https://www.fis.com.vn/Views/system-integration
https://viblo.asia/p/huong-dan-day-du-ve-test-migration-du-lieu-phan-1-
4P856PeaZY3
3 cách tiếp cận phổ biến trong xây dựng một nền tảng tích hợp và phốI hợp
https://digital.fpt.com.vn/nen-tang-tich-hop-va-phoi-hop

“Bạn mới chỉ quen với API nhưng các kiểu tích hợp như ESB thì chưa có thời
gian đào sâu”
https://viblo.asia/p/enterprise-service-bus-esb-la-gi-va-mot-vai-esb-pho-bien-hien-
nay-LzD5dgwWljY
https://helpex.vn/article/cac-mau-tich-hop-doanh-nghiep-tu-esb-den-esp-va-api-
609081ee101a480c64e9b57a
So sá nh mẫ u tích hợ p ESB, ESP và API
So vớ i hai mẫ u khá c, ESB thiếu sự hỗ trợ từ cá c cô ng nghệ đá m mâ y và
DevOps. Nó trở thà nh phầ n tử điểm duy nhấ t đượ c kết hợ p trong quá trình
DevOps như mộ t mô hình triển khai trung tâ m. Nỗ lự c duy trì sự điều phố i
dịch vụ rấ t phứ c tạ p và cao. Mặ t khá c, API Web và ESP dự a trên đá m mâ y có
tiềm nă ng giả m chi phí phá t triển và linh hoạ t hơn trong việc hỗ trợ tích
hợ p bấ t khả tri doanh nghiệp tá ch rờ i.

Do nhu cầ u kinh doanh về khả nă ng đá p ứ ng cao hơn, tích hợ p hỗ n hợ p và


nhậ n thứ c về bố i cả nh trong cá c quyết định kinh doanh, cá c tổ chứ c đã thự c
hiện mộ t cá ch tiếp cậ n chiến lượ c hơn để hỗ trợ ESP và Web API. Vớ i lưu ý
củ a Gartner, ba mẫ u có thể đượ c giả i quyết và so sá nh như sau:
7. SDK là gì?
SDK cung cấp các thư viện, tài liệu, mẫu template, sample code, tiện ích gỡ
rố i (debugging), cá c ghi chú hỗ trợ (documentation) hoặ c cá c tà i liệu
bổ sung,… để nhà phá t triển có thể tích hợ p thêm và o phầ n mềm/ứ ng
dụ ng củ a mình

API là từ viết tắ t củ a Application Programming Interface. Nó là mộ t


giao diện lậ p trình ứ ng dụ ng. API là phầ n mềm trung gian để cá c ứ ng
dụ ng và chương trình tương tá c vớ i nhau.
Cò n SDK là mộ t bộ cá c cô ng cụ . Trong thế giớ i cô ng nghệ, nhữ ng
chương trình khá c nhau có thể sử dụ ng SDK để phá t triển ứ ng dụ ng
hay phầ n mềm trên mộ t nền tả ng.
Như vậ y, cả API lẫ n SDK đều có khả nă ng nố i kết cá c phầ n mềm. Tuy nhiên,
bả n chấ t củ a chú ng lạ i có sự khá c biệt lớ n.

8. Books
Một là: anh khuyên các bạn cố gắng nhận nhiều trách nhiệm hơn những gì mình đang
làm. Đừng quan tâm nhiều tới quyền lợi. Vì suy cho cùng thì mình có điều kiện phát
triển kĩ năng của mình, đó đã là lợi ích đầu tiên.
Nếu em ở level junior thì hãy cố thử nhận task của level senior. Rồi khi em làm
senior developer thì em nhận trách nhiệm design architect của một component
trong công việc của TA. Em nhận nhiều thử thách khó khăn thì kĩ năng của em sẽ tốt
hơn + có nhiều cơ hội hơn.

Hai là: nếu em làm những project dễ hoặc làm những công việc dễ dàng thì em
không thể trở thành developer có nhiều kinh nghiệm và phát triển lên để trở thành
TA giải quyết được những project yêu cầu độ phức tạp kỹ thuật cao. Do đó em
nên xin tham gia vào những project khó, yêu cầu kỹ thuật cao để rèn luyện kỹ năng.
Ba là: chọn công ty mà tại đó em có thể nhìn sản phẩm từ nhiều góc độ: UI/UX, front
end, back end, development process… Em có thể tích lũy được phần lớn những kinh
nghiệm này từ cả công ty Product và Outsourcing, nhưng công ty Product đặc biệt tốt
hơn trong việc giúp em quan sát + hiểu toàn bộ development process.
Tham khảo:  3 điểm khác biệt giữa công ty product và công ty outsourcing
Bốn là: cập nhật thông tin công nghệ, kỹ thuật mới bằng cách đọc sách, xem blog và
áp dụng vào công việc hàng ngày của mình.
Có một số sách anh đã từng đọc và đánh giá nó như là bước khởi đầu cho việc học
thiết kế phần mềm và viết code chất lượng cao.

Các cuốn sách dưới đây có thể được áp dụng cho hầu hết mọi ngôn ngữ lập trình.


 Design Patterns: Elements of Reusable Object-Oriented
Software. Nhiều kinh nghiệm về object-oriented software của 4
designer hàng đầu được tập hợp tại đây với những giải pháp đơn
giản, gọn gàng cho nhiều vấn đề design thông thường. Quyển
này viết cách đây 20 năm, nhưng đến bây giờ đọc vẫn tốt vì kiến
thức architect thường là giữ nguyên/thay đổi rất ít theo thời
gian.
 Patterns and Best Practices for Enterprise Integration . Quyển
sách cung cấp 1 catalog gồm 65 patterns giá trị với các solution
thực tế mô tả khả năng của messaging và giúp bạn thiết kế
messaging solution hiệu quả cho doanh nghiệp của bạn.
 Growing Object-Oriented Software, Guided by Tests . Qua nhiều
ví dụ, bạn sẽ học được cách TDD hoạt động ở nhiều mức độ, sử
dụng test để drive features, học về cấu trúc object-oriented của
code, và cách sử dụng Mock Objects để miêu tả mối quan hệ
giữa các đối tượng.
 Agile Software Development, Principles, Patterns and practices :
Quyển sách cơ bản và nâng cao về những nguyên tắc thiết kế
phần mềm hướng đối tượng cần thiết cho software developer và
architect. Tác giả diễn giải rất cụ thể các nguyên tắc lập trình
hướng đối tượng với rất nhiều ví dụ. Kết hợp giữa quyển sách
này và [1] Design Patterns: Elements of Reusable Object
Oriented Software là bước đầu giúp em học cách thiết kế những
phần mềm lớn.
Ngoài ra, anh cũng khuyên các bạn nên tìm hiểu các nguồn thông tin này hàng ngày:

1. InfoQ
2. DZone
3. Martin Flower

You might also like