THẢO LUẬN

Thử thách thực chiến (Boss Fight)

Giả sử bạn vừa được nhận vào vị trí Kỹ sư Kiến trúc Phần mềm cho một công ty khởi nghiệp về Nhà thông minh (Smart Home) 🏠. Hệ thống của công ty đang rất lộn xộn và Giám đốc kỹ thuật nhờ bạn cấu trúc lại nó.

Bài toán số 1

Hệ thống mạng của ngôi nhà cần một đối tượng BoDieuKhienTrungTam (Central Hub) để quản lý mọi thứ. Để tránh việc các lệnh điều khiển bị xung đột, Giám đốc yêu cầu: Trong toàn bộ vòng đời của ứng dụng, chỉ được phép có duy nhất một và chỉ một đối tượng BoDieuKhienTrungTam tồn tại. Bất kỳ đoạn code nào cố tình gọi khởi tạo lần thứ hai đều phải bị ngăn chặn và hệ thống chỉ trả về đối tượng đã tạo từ trước.

Theo bạn, chúng ta cần sử dụng Design Pattern nào (trong nhóm Khởi tạo) để giải quyết yêu cầu khắt khe này?

Bài toán số 2

Ngôi nhà của bạn vừa được lắp một Cảm biến khói 💨. Giám đốc yêu cầu: Khi phát hiện có khói, Cảm biến này phải báo động ngay lập tức cho 3 nơi: Ứng dụng điện thoại của chủ nhà, Chuông báo động, và Hệ thống phun nước.Tuy nhiên, trong tương lai có thể nhà sẽ lắp thêm nhiều thiết bị khác cũng muốn nhận thông báo này. Để code của Cảm biến khói không bị phình to mỗi khi thêm thiết bị mới, Giám đốc muốn các thiết bị phải tự "Đăng ký" (Subscribe) vào Cảm biến. Khi có khói, Cảm biến chỉ việc gửi thông điệp "Thông báo" (Notify) cho danh sách tất cả những ai đã đăng ký.

Theo bạn, Design Pattern nào (thuộc nhóm Hành vi) được sinh ra để giải quyết chính xác cơ chế "Đăng ký - Lắng nghe thông báo" này?

Bài toán số 3

Hệ thống nhà thông minh của bạn được lập trình để điều khiển tất cả các bóng đèn theo một chuẩn chung BongDenThongMinh với hai hàm đơn giản là batDen() và tatDen(). Tuy nhiên, phòng thu mua vừa nhập về một lô bóng đèn thông minh cực xịn của Xiaomi. Khổ nỗi, bộ thư viện mã nguồn đi kèm của Xiaomi lại không dùng hàm giống chúng ta, nó xài một hàm hoàn toàn khác tên là kichHoatNguonSang(int mucDoSang). Giám đốc yêu cầu: Không được sửa code lõi của hệ thống (vì nó đang chạy ổn định cho hàng nghìn nhà khác rồi), và tất nhiên chúng ta cũng không có quyền sửa mã nguồn thư viện của hãng Xiaomi. Chúng ta cần tạo ra một class trung gian, đứng ở giữa để "dịch" lệnh batDen() của hệ thống thành lệnh kichHoatNguonSang(100) cho cái bóng đèn Xiaomi kia hiểu.

Theo bạn, trong nhóm Cấu trúc (Structural), Pattern nào đóng vai trò như một "phiên dịch viên" hay một "cục chuyển đổi" để hai đầu mối không tương thích có thể cắm vừa vào nhau?

0

Trong photoshop mình tưởng có resize hàng loạt và cho logo hàng loạt mà nhỉ

0

NGUYỄN HUY HOÀNG Software Engineer

📞 Phone: 0941 280 073

📧 Email: hhoang02052004@gmail.com

0

NGUYỄN HUY HOÀNG Software Engineer

📞 Phone: 0941 280 073

📧 Email: hhoang02052004@gmail.com

0

NGUYỄN HUY HOÀNG Software Engineer

📞 Phone: 0941 280 073

📧 Email: hhoang02052004@gmail.com

0

"3. Kỹ sư có bị AI đá ra chuồng gà?" 😂😂

0

Bài viết hay quá cảm ơn bạn đã chia sẻ !

0

thanks e đã theo dõi 😍

0

😁😁 đơn giản nhưng không phải ai cũng hiểu bản chất, rất vui vì nó có ích với b

0

Rất vui vì bài viết hữu ích và được bạn lưu lại để chia sẻ cho team. Chúc anh em trong team code thật mượt và không bị kẹt lại ở những bẫy ngầm như này nhé😁😁

0

@bullpig Mỗi người mỗi quan điểm, miễn sao mình tìm được thứ mình cần ở trong đó là được mà đúng không😁😁enjoy thôi

0

Hahaaa chuẩn quá bạn ơi🤣 Lúc deadline dí rồi thì "code chạy được trước 5h" chính là nguyên tắc tối thượng, SOLID cứ để hôm sau refactor rồi tính tiếp. Cảm ơn bạn đã chia sẻ và ủng hộ bài viết nhé

0

Cảm ơn bạn, thấy hay thì chia sẻ mọi người cùng đọc nhé🥰

0

Cảm ơn b, thấyy hay thì chia sẻ mọi người cùng đọc nhé🥰

0

NGUYỄN HUY HOÀNG Software Engineer

📞 Phone: 0941 280 073

📧 Email: hhoang02052004@gmail.com

0

NGUYỄN HUY HOÀNG Software Engineer

📞 Phone: 0941 280 073

📧 Email: hhoang02052004@gmail.com

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí