Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Custom Calculator Golang

Mô tả

App này được viết bằng Golang, là một bản clone của app Calculator trên Windows.

Chức năng

Có các chức năng tương tự Calculator trên windows, bao gồm: cộng, trừ, nhân chia, mũ 2, căn bậc 2, nghịch đảo, negate, clear, clear entry, backspace, ...

Chức năng thêm: Chưa có

Kiến trúc của chương trình

Finite State Machine

Ứng dụng có sử dụng State Machine để mô hình hóa từng trạng thái: First Operation, Operation, Second Operation, Result. Việc sử dụng State Machine giúp quản lý các logic phức tạp đặc biệt khi chương trình nhận input từ người dùng và đi từ trạng thái này sang trạng thái khác.

Ví dụ:

  • Ban đầu người dùng bấm 6, thì state là First Opẻation
  • Tiếp theo người dùng bấm dấu + -> State chuyển sang Operation
  • Tiếp theo người dùng bấm số 3 -> State chuyển sang Second Operation
  • Cuối cùng người dùng bấm = -> State chuyển sang Result

Với mỗi State khác nhau, sẽ có một cách để transition từ State đó sang State khác.

Event driven

Định nghĩa

Event-driven Architecture (EDA - Kiến trúc hướng sự kiện) là một kiến trúc phần mềm mà ở đó ta chú trọng vào việc tạo và sử dụng các events (sự kiện). Một event sẽ biểu diễn một hành động có mục đích nào đó. Thông thường, các sự kiện có thể tương ứng với việc tạo hoặc thay đổi state của một vài entities. Ví dụ: khi ta mua một sản phẩm nào đó trên các trang e-commerce thì đó cũng là một event. Khách hàng gửi review về một sản phẩm nhận được đó cũng là một event. 1

Áp dụng vào ứng dụng Calculator, mỗi khi người dùng bấm một nút nào đó, thì sẽ tạo ra một event. Trong fyne sẽ có event listener và khi nó bắt được một event, nó sẽ lập tức gọi hàm handler của nút bấm tương ứng.

Ưu nhược điểm

Ưu điểm

  • Scalability: có thể dễ dàng tăng số lượng event consumer mà không làm ảnh hưởng tới event producer
  • Loose coupling: Event consumer và event producer không nhất thiết phải biết đến sự có mặt của nhau
  • Real-time responsiveness: Hệ thống có thể phản hồi ngay lập tức khi có event thay vì phải polling liên tục -> Tiết kiệm tài nguyên

Nhược điểm

  • Khó debug và testing bởi vì đây là mô hình không tuần tự, tái hiện lại bug khó khăn hơn.
  • Vấn đề nhất quán dữ liệu: Có thể có khoảng trễ nhỏ giữa lúc sự kiện xảy ra và tất cả các event consumer cập nhật xong
  • Nguy cơ event loop: Nếu thiết kế không tốt có thể tạo ra vòng lặp sự kiện event A -> event B -> event C -> event A

References

Footnotes

  1. https://viblo.asia/p/kien-truc-huong-su-kien-event-driven-architecture-zXRJ8n2dVGq

About

A simple calculator written in Go

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages