- vừa được xem lúc

Hexagonal Architecture là gì và ứng dụng của nó

0 0 29

Người đăng: Kha Leo

Theo Viblo Asia

I. Tổng quan về kiến trúc phần mềm

image.png

Application without architecture (nguồn: Internet)

image.png

Application with clean architecture (nguồn: Internet)

II. Tại sao chúng ta cần kiến trúc hoá ứng dụng

  • Tạo ra ứng dụng dễ mở rộng, maintain
  • Không bị ảnh hưởng từ framework / library
  • Dễ dàng sharing cho team members, stakeholders
  • Giảm thời gian triển khai giữa giữa các team (FrontEnd/Backend/MobileApp)

III. Hexagonal Architecture là gì?

image.png

Hexagonal Architecture
  • Hexagonal Architecture (tên gọi khác là ports and adapters architecture), là một mẫu kiến trúc được dùng trong thiết kế phần mềm. Nó hướng tới việc xây dựng ứng dụng xoay quanh business/application logic mà không ảnh hưởng hoặc phụ thuộc bởi bất kì thành phần bên ngoài, mà chỉ giao tiếp với chúng qua ports/adapters.
  • Vì tính không phụ thuộc nên chúng ta dễ dàng chuyển đổi giữa các data sources (libs/frameworks) mà không ảnh hưởng đến business/application logic. Inputs/Outputs của data sources đều được đặt ở các cạnh của hình lục giác (hexagonal)
  • Có thể implement business logic trước khi lựa chọn library hay framework
  • For fun: Tại sao lại là hexagonal (6 cạch) mà không phải bất kì hình khác? -> Lục giác chỉ là tên gọi, trên thực tế chúng là đa giác và với vô số ports/adapters dùng để kết nối với data sources bên ngoài.

IV. Tại sao hexagonal được sinh ra

  1. Chúng ta cùng xem qua một đoạn code rất hay gặp:

image.png

Nguồn: Internet
  1. Review:
  • Đoạn code trên nằm trong 1 file có tên functions/**.php
  • Có cả code Javascript, Jquery, Html trong cùng 1 file
  • Ngăn cách logic với nhau bằng 1 hàng trống
  • Số dòng trong file vô cùng lớn
  • Cùng chứa cả business logic, UI logic

V. Giải pháp của Hexagonal Architecture

  • Tách bạch phần code xử lý liên quan về business/application ra khỏi thành phần khác

image.png

image.png

  • Phân chia business code ra thành Domain và Use cases

image.png

  • Các thành phần bên ngoài (có thể) phụ thuộc bên trong nó nhưng không ngược lại

image.png

image.png

V. Triển khai

Chúng ta chia logic code thành 2 thành phần image.png

  • Domain

- models: Khởi tạo những models cần thiết, types or interfaces

image.png

- repositories: tất cả types và interfaces liên quan đến repository (một repository chịu trách nhiệm lấy data từ nhiều nơi khác nhau về, như web services, database, hay một file bất kì...)

image.png

- services: chịu trách nhiệm tương tác với models và thực thi những hành động liên của chúng. Ví dụ: implement method kiểm tra cho phép thêm sản phẩm vào giỏ hàng nếu tồn kho sản phẩm > 0

image.png

  • Infrastructufre

- http: Lưu trữ những thứ liên quan đến phía client, (e.g. DTO nhận từ một repository)

image.png

- instances: instance của client và repositories. Được xem như là entry point của hệ thống

image.png

image.png

Nếu phải chuyển đổi axios sang sử dụng fetch hay ajax, chúng ta vẫn dễ dàng thay đổi bằng cách tạo 1 instance mới cho chúng.

- repositories: Implement repositories đã được define ở domain

image.png

- Ví dụ với VueJs

image.png

VI. Tổng kết

  • Ưu điểm của Hexagonal Architecture
    • Tổ chức code xoay quay business rules, không phải framework hay library
    • Dễ kiểm soát bởi nguyên tắc phụ thuộc chỉ cho phép các layer phụ thuộc các layer bên trong nó
    • Hỗt trợ tốt triển khai testing, maintain
    • Code base dễ dàng mở rộng
    • Ứng dụng miễn phụ thuộc với sự phát triển của công nghệ (library/framework)
    • Hạn chế việc tốn thời gian trong việc lựa chọn công nghệ cho dự án
    • Codebase có thể dùng chung cho frontend, backend hay mobile app
  • Nhược điểm
    • Tổ chức code phức tạp, tốn thời gian hơn

VII. Reference

Mục tìm kiếm đồng đội

Hiện tại thì bên công ty mình, là Hoàng Phúc International, với hơn 30 năm kinh nghiệm trong lĩnh vực thời trang. Và là trang thương mại điện tử về thời trang lớn nhất Việt Nam. Team công nghệ của HPI đang tìm kiếm đồng đội cho các vị trí như:

Với mục tiêu trong vòng 5 năm tới về mảng công nghệ là:

  • Sẽ có trang web nằm trong top 10 trang web nhanh nhất VN với 20 triệu lượt truy cập mỗi tháng.
  • 5 triệu loyal customers và có hơn 10 triệu transactions mỗi năm.
  • Team đang xây dựng một hệ thống rất lớn với rất nhiều vấn để cần giải quyết, và sẽ có rất nhiều bài toàn thú vị cho các bạn. Nếu các bạn có hứng thú trong việc xây dựng một hệ thống lớn, linh hoạt, dễ dàng mở rộng, và performance cao với kiến trúc microservices thì hãy tham gia với tụi mình.

Nếu các bạn quan tâm hãy gửi CV ở trong trang tuyển dụng của Hoàng Phúc International hoặc qua email của mình nha [email protected].

Cảm ơn các bạn đã đọc.

Bình luận

Bài viết tương tự

- vừa được xem lúc

4 đặc tính của lập trình hướng đối tượng (Object oriented program)

Lập trình hướng đối tượng quá quen thuộc rồi bạn nào học lập trình đều phải học, đi phỏng vấn cũng vậy hỏi suốt(chắc cái này tùy vào vị trí tuyển dụng chủ yếu junior chắc chắn sẽ hỏi).nó là nền tảng cho hầu hết các design pattern hiện nay.

0 0 34

- vừa được xem lúc

Khác nhau giữa abstract class và interface khi nào dùng chúng

Nhắc đến Interface và abstract class hãy nhớ 2 từ này khá clear rồi, Khi sử dụng Interface là bạn Implement còn sử dụng abstract class là bạn extend. . Interface:. .

0 0 29

- vừa được xem lúc

So sánh Interface và Abstract trong lập trình hướng đối tượng.

Tổng quan. Interface và Abstract class là 2 khái niệm cơ bản trong lập trình OOP.

0 0 48

- vừa được xem lúc

Áp Dụng Nguyên Tắc SOLID Trong Lập Trình

Giới Thiệu. 1. SOLID là gì. SOLID là viết tắt của 5 chữ cái đầu trong 5 nguyên tắc:.

0 0 21

- vừa được xem lúc

Kỹ thuật giải quyết bài toàn về policy và công thức tính toán động cho sản phẩm phần mềm

Dạo này tôi có một mối duyên rất tình cờ với việc làm các phần mềm thuộc lĩnh vực tài chính và ngân hàng. Một số bài toán trong lĩnh vực này làm tôi nhớ đến những ngày đầu làm việc với phần mềm Trinet

0 0 21

- vừa được xem lúc

Object Relational Mapping

Trong cách phát triển ứng dụng web hiện nay chắc hẳn các bạn đã quen với với từ khóa ORM(Object Relational Mapping). Khi mà thời đại của các framework ứng với các ngôn ngữ đang lên ngôi một cách mạnh

0 0 28