1 điểm bởi GN⁺ 2025-01-19 | 1 bình luận | Chia sẻ qua WhatsApp

GUI để chỉnh sửa sơ đồ lớp Mermaid

  • Ưu điểm của biểu đồ Mermaid: Biểu đồ Mermaid, vốn cho phép thể hiện nhanh các sơ đồ phức tạp, nay đã trở nên trực quan và dễ chỉnh sửa sơ đồ lớp hơn nhờ bản cập nhật gần đây. Tính năng mới mở rộng trình biên tập trực quan để hỗ trợ tương tác trực tiếp với sơ đồ lớp, đồng thời cung cấp nhiều công cụ giúp người dùng nâng cao trải nghiệm làm việc với sơ đồ.

Sơ đồ lớp là gì?

  • Định nghĩa sơ đồ lớp: Đây là một dạng UML (Ngôn ngữ Mô hình hóa Hợp nhất), dùng để mô hình hóa cấu trúc của hệ thống bằng cách thể hiện các lớp, thuộc tính, phương thức và mối quan hệ giữa các đối tượng. Đây là công cụ thiết yếu trong thiết kế hướng đối tượng, giúp trực quan hóa cách các phần khác nhau của hệ thống tương tác với nhau.
  • Các thành phần cơ bản:
    • Lớp: Biểu thị đối tượng hoặc khái niệm.
    • Thuộc tính: Đặc trưng hoặc thuộc tính của lớp.
    • Phương thức: Công việc hoặc phép toán mà lớp có thể thực hiện.
    • Quan hệ: Biểu thị kết nối hoặc tương tác giữa các lớp.

Công cụ trình biên tập trực quan mới

  • Giới thiệu công cụ: Thanh công cụ của trình biên tập trực quan giới thiệu nhiều công cụ mới cho sơ đồ lớp.
    • Thay đổi hướng dựng sơ đồ: Điều chỉnh bố cục của sơ đồ.
    • Thêm lớp mới: Dễ dàng thêm lớp mới vào sơ đồ.
    • Thêm tiêu đề và ghi chú: Thêm tiêu đề vào sơ đồ hoặc chèn ghi chú không gắn với lớp cụ thể nào.
    • Thêm namespace trống: Xác định phần giữ chỗ cho các lớp thuộc một namespace cụ thể.
    • Cập nhật cấu hình sơ đồ: Bật/tắt các tùy chọn như khả năng hiển thị của "hộp thành viên rỗng" để giữ giao diện gọn gàng.
    • Thay đổi theme và bố cục: Chọn nhiều theme khác nhau và điều chỉnh diện mạo của sơ đồ.

Tạo lớp và quan hệ mới

  • Cách tạo lớp và quan hệ:
    • Tạo lớp mới từ quan hệ hiện có: Nhấp vào một lớp hiện có trong sơ đồ rồi kéo ra vùng trống để tạo lớp mới và thiết lập quan hệ trực tiếp với lớp ban đầu.
    • Tạo quan hệ giữa các lớp hiện có: Kéo đường quan hệ từ một lớp sang lớp khác để nhanh chóng thiết lập quan hệ.

Chỉnh sửa chi tiết lớp

  • Sửa thuộc tính của lớp: Trình biên tập trực quan cung cấp một giao diện tương tác mạnh mẽ cho phép sửa thuộc tính của lớp mà không cần viết mã. Có thể cấu hình chi tiết từng thuộc tính của lớp.
    • Thuộc tính: Xác định bộ sửa đổi phạm vi hiển thị, đặt kiểu dữ liệu, chỉ định tên thuộc tính.
    • Phương thức: Thiết lập phạm vi hiển thị của phương thức, xác định kiểu trả về, chỉ định tên phương thức và tham số.

Mẹo bổ sung để tối ưu hóa sơ đồ

  • Thử nghiệm nhiều bố cục khác nhau: Tận dụng các tùy chọn bố cục và theme để tìm ra diện mạo tối ưu cho sơ đồ.
  • Thêm ngữ cảnh bằng ghi chú: Dùng tính năng ghi chú để giải thích một số phần của sơ đồ và làm rõ các quan hệ phức tạp.

Bắt đầu

  • Tận dụng công cụ trình biên tập trực quan của Mermaid: Khám phá các tính năng mới để làm cho việc tạo sơ đồ lớp hiệu quả và dễ tiếp cận hơn. Dù bạn tạo sơ đồ mới từ đầu hay cải thiện sơ đồ hiện có, các cập nhật này đều giúp tiết kiệm thời gian, công sức và cho phép tập trung hơn vào thiết kế cũng như cấu trúc của hệ thống.

1 bình luận

 
GN⁺ 2025-01-19
Ý kiến trên Hacker News
  • Tôi thường dùng Claude làm front-end cho Mermaid. Khi cần giải thích các ý tưởng phức tạp, những sơ đồ Claude tạo nhanh giúp việc giải thích dễ dàng hơn nhiều
    Tôi cũng có tài khoản Mermaid trả phí, nhưng dù sao thì tôi vẫn dùng Claude nhiều nhất, nên Claude vẫn là điểm vào đầu tiên. Điều tôi mong đợi ở GUI là khả năng thêm style và màu sắc cho các sơ đồ nhanh như vậy, rồi dịch chuyển các hộp một chút để mũi tên trông ổn hơn so với bố cục tự động
    Nhìn blog thì có vẻ tính năng thay đổi màu sắc và style của từng hộp riêng lẻ có thể sẽ bị thiếu, nhưng đây là phần tốn thời gian nhất khi xử lý thủ công bằng code, nên sẽ rất tốt nếu có bộ công cụ phong phú

    • Nghe thú vị, nhưng tôi tò mò không biết có gặp vướng mắc gì không. Tuần trước tôi nhờ Claude tạo sơ đồ cú pháp cho một ngữ pháp đồ chơi, và nguồn Mermaid bị lỗi cú pháp vì các ký tự đặc biệt chưa được escape
      Dù Claude có widget Mermaid riêng, tôi vẫn không thể khiến nó sửa lỗi trong code của chính nó
  • Tôi là Dominic từ đội ngũ sản phẩm Mermaid. Nếu hiện có vấn đề với sản phẩm, yêu cầu cải tiến, hoặc nội dung muốn trao đổi, hãy email cho tôi tại dominic@mermaidchart.com hoặc đặt lịch trên calendar: https://calendly.com/dominic-01w/mermaid-shapers-product-int...

    • Tôi tò mò khi nào sơ đồ Mermaid sẽ được render bên ngoài trình duyệt web: https://github.com/mermaid-js/mermaid/issues/2485
      Tôi đã làm một trình soạn thảo Markdown tên KeenWrite(https://keenwrite.com/), và cho phép nhúng sơ đồ bằng cú pháp ba dấu backtick. Nó parse tiền tố diagram- để chuyển các từ như graphviz sang Kroki(https://kroki.io/), rồi Kroki render nhiều loại sơ đồ ASCII, bao gồm Mermaid
      Trong Markdown, các đoạn mã nguồn vốn được hiển thị bằng font monospace bằng cách thêm định danh ngôn ngữ sau ba dấu backtick, nên việc GitHub phá vỡ quy ước này khi tạo ra chuẩn de facto cho sơ đồ Mermaid là một quyết định đáng tiếc
    • Tôi đồng ý với câu hỏi về render không cần trình duyệt. Cho đến giờ, tôi đã thử chỉnh cấu hình Selenium cho build headless nhưng thất bại, và văn bản cũng bị render sai
      Với một công cụ muốn được áp dụng rộng rãi, tôi cho rằng render không cần trình duyệt phải là ưu tiên hàng đầu như một tính năng cơ bản vượt khỏi mức PoC
    • Sẽ tốt hơn nếu có kiểm soát bố cục tốt hơn để các thành phần sơ đồ không va chạm nhau. Có lẽ đây là yêu cầu không dễ, nhưng tôi gặp các thành phần bị đặt sai khá thường xuyên, và nếu giải quyết được thì đó có thể là lợi thế lớn của Mermaid
  • Gần đây tôi đã dùng thử thứ này và lúc đầu khá thích. ChatGPT cũng tạo sơ đồ Mermaid khá tốt, nhưng tôi chưa thử tính năng AI tích hợp của nó
    Tuy nhiên, sau khi tạo một sơ đồ có độ phức tạp trung bình rồi cố kéo thả thủ công trong tính năng Whiteboard để cải thiện layout, trải nghiệm khá chao đảo. Rất khó sắp xếp vào vị trí mong muốn hoặc kéo cho đúng, và cũng khó xử lý tình trạng chồng lấn. Một số loại sơ đồ không hỗ trợ Whiteboard cũng là điểm đáng tiếc
    Sự khác biệt về tính năng giữa mermaidchart.com và mermaid.live cũng gây bối rối. Tôi không rõ chúng là sản phẩm cạnh tranh hay các biến thể của những ứng dụng tương tự, và các tên “Playground” và “Live Editor” cũng gây nhầm lẫn. Dù vậy, tôi vui vì nó tồn tại và hy vọng sẽ tiếp tục được cải thiện

    • Tôi là CEO của Mermaid. Whiteboard vẫn còn ở giai đoạn đầu, nên dự kiến sẽ được cải thiện khá nhiều trong vài tháng tới
      mermaidchart.com và mermaid.live do cùng một đội ngũ vận hành. Mermaid.live là trình chỉnh sửa ban đầu của dự án mã nguồn mở 10 năm tuổi, đồng thời là trình chỉnh sửa hosted hoàn toàn mã nguồn mở
      Người sáng lập Mermaid gần đây đã cùng venture studio của CEO GitLab tạo ra mermaidchart.com, và đang mở rộng để phục vụ nhiều người dùng hơn cùng các tính năng cấp doanh nghiệp. Công ty theo mô hình open core và đã nhận vốn đầu tư mạo hiểm, nhưng dự án Mermaid sẽ tiếp tục là mã nguồn mở và sẽ tiếp tục được đầu tư
    • Việc bố cục chỉ theo cách Mermaid “muốn” chứ không theo cách mình muốn có thể là vấn đề căn bản của Mermaid. Từ lâu đã có những khoảng trống khổng lồ xuất hiện, và rất khó tạo layout theo ý muốn
  • Các công cụ vẽ sơ đồ có thuật toán tự động bố trí chủ yếu chỉ được dùng khi tạo hình trực quan để gỡ lỗi theo cách lập trình. Nếu nhằm mục đích tài liệu hóa, tôi thích vẽ thủ công bằng OmniGraffle hơn
    Việc làm cho đồ thị trông đẹp bằng các công cụ như graphviz rất phức tạp, và cuối cùng bạn sẽ lạm dụng các tính năng theo cách lách luật để tạo ra hình dạng mong muốn
    Tôi nghĩ thứ thực sự cần là một thuật toán bố trí đồ thị dựa trên học máy có thể cân nhắc cả tính dễ đọc lẫn thẩm mỹ. Những gì tôi tìm được đến nay đều nghiêng về hiển thị đồ thị lớn, gần với một lĩnh vực khác hơn
    Nếu Mermaid đang thu thập mọi điểm chỉnh sửa phát sinh trong UI thì có vẻ đó sẽ là một tập dữ liệu khá tốt

    • Chúng tôi đang xây dựng và bán một engine bố trí như vậy, có thể thử tại đây: https://play.d2lang.com/?script=qlDQtVOo5AIEAAD__w%3D%3D&lay...
      Ví dụ lớn hơn ở đây: https://play.d2lang.com/?script=rJLfavMwDMXv_RR6gYbvo3ce7FWG...
      Tôi không thích tự quảng bá trong bài viết về đối thủ, nhưng Mermaid không cạnh tranh với hướng tự xây engine bố trí riêng, nên tôi nghĩ điều này có liên quan trong bối cảnh này
    • Đây là vài liên kết thú vị tôi tìm được khi tìm hiểu lĩnh vực này. ELK, một thư viện vẽ đồ thị tổng quát tương tự Graphviz nhưng có nhiều tùy chọn và khả năng kiểm soát hơn: https://eclipse.dev/elk/
      Thử nghiệm của nhóm Kiel University, những người phát triển ELK: https://github.com/kieler/KLighD
      Wiki dự án Kieler: https://rtsys.informatik.uni-kiel.de/confluence/display/KIEL...
      Thư viện vẽ đồ thị dựa trên ràng buộc: https://www.adaptagrams.org/, bản triển khai JS: https://ialab.it.monash.edu/webcola/
      Ngoài ra cũng đáng xem bài báo HOLA https://ialab.it.monash.edu/~dwyer/papers/hola2015.pdf, demo Confluent Graphs https://www.aviz.fr/~bbach/confluentgraphs/, bài báo về bố trí trực giao https://arxiv.org/pdf/1408.4626.pdf, và bài báo về nén power graph https://arxiv.org/pdf/1311.6996v1.pdf
    • Tôi là Dominic từ nhóm sản phẩm Mermaid. Chúng tôi ra mắt Whiteboard để giúp người dùng có được đúng layout họ muốn, nhưng nó vẫn còn ở giai đoạn đầu nên đang được cải thiện nhiều
      Tôi hiểu rằng thuật toán tự động bố trí tạo ra tốc độ là một sức hút lớn của Mermaid, nhưng layout hiện tại đôi khi có thể trở nên khá rối rắm
      Ý tưởng về mô hình học máy rất thú vị, và tôi tò mò các yêu cầu cơ bản của một sơ đồ dễ đọc, đẹp mắt là gì. Ví dụ có thể có các tiêu chí như cạnh nên vuông góc hay bo tròn. Nếu bạn có thể chia sẻ suy nghĩ, xin hãy gửi email tới dominic@mermaidchart.com
    • Tôi đang xây dựng một công cụ kết hợp cú pháp viết sơ đồ bằng code với cú pháp định nghĩa các ràng buộc kết xuất. Ví dụ như phần này phải nằm bên trái phần kia, hoặc mũi tên này không được cắt mũi tên kia
      Tôi hy vọng nó có thể giúp việc kết xuất sơ đồ nhất quán và tinh chỉnh đến từng pixel cuối cùng trở nên dễ dàng hơn rất nhiều. Hiện đã có một phiên bản alpha rất sớm của renderer dùng Cassowary hoạt động được, và tôi đang làm một GUI tốt
  • Tôi mất hứng ngay ở bước “Create your account”. Giá mà trước khi tạo tài khoản có thể dùng thử trình chỉnh sửa và lưu vào bộ nhớ cục bộ của trình duyệt cho đến khi thấy ưng ý

  • Tôi thích việc Mermaid ngày càng tốt hơn. Với sequence diagram, tôi nghĩ https://sequencediagram.org/ là tốt nhất. Tôi không liên quan gì, chỉ là một người dùng hài lòng

    • Trước đây tôi đã dùng nó trong một phiên cộng tác về sơ đồ, và thích vì nó dễ, đơn giản. Tuy nhiên điểm cốt lõi của Mermaid là tính di động. Điều quan trọng là có thể nhúng vào tài liệu Markdown và xem được trên nhiều trình biên tập cũng như nền tảng
    • Từ góc nhìn nhóm sản phẩm Mermaid Chart, tôi nghĩ tính năng sequence diagram của Mermaid cũng khá nổi bật. Tôi tò mò https://sequencediagram.org/ tốt hơn sequence diagram của Mermaid ở điểm nào
    • Tôi đã thử các trình chỉnh sửa khác, nhưng cuối cùng lúc nào cũng quay lại sequencediagram.org. Nó đơn giản là hoạt động tốt và ít phiền toái
    • Tôi cảm thấy trình chỉnh sửa sequence diagram của MermaidChart tốt hơn sequencediagram.org
    • sequencediagram.org có vẻ có lẽ dùng PlantUML, nên có thể làm cùng việc đó trên máy cục bộ mà không cần website
  • Tôi hiểu là triết lý khác nhau, nhưng sẽ thật tốt nếu đến một ngày có thể dùng Mermaid bên trong LaTeX. Ít nhất nếu có một công cụ chuyển Mermaid sang TikZ một cách ổn định thì việc chuẩn bị slide có lẽ sẽ dễ hơn nhiều
    Cũng có thể xuất ra PNG/JPG, nhưng thường mất rất nhiều khả năng tùy chỉnh, và gần như chỉ có thể phóng to hoặc thu nhỏ để vừa với trang
    Hôm qua khi tìm hiểu chuyện này, tôi cũng thấy GUI mới được giới thiệu trong bài này, và cuối cùng đã phải vật lộn để xuất ra PNG rồi chỉnh cho khớp với bố cục trang Beamer

  • Draw.io có nhúng sơ đồ Mermaid, VSCode và nhiều plugin IDE cũng có, nên tôi tò mò không biết cái này đặc biệt ở điểm nào

    • Tích hợp Mermaid của Draw.io và các plugin VSCode/IDE thì tốt, nhưng chủ yếu hỗ trợ chỉnh sửa theo kiểu lập trình cho sơ đồ
      Điểm khác biệt của Mermaid Chart là chỉnh sửa hai chiều. Bạn có thể sửa mã để thay đổi sơ đồ, và nếu trực tiếp thay đổi sơ đồ thì thay đổi đó sẽ tự động được phản ánh vào mã
      Hiện tại, tính năng chỉnh sửa hai chiều này dùng được với sơ đồ lớp và lưu đồ, và dự kiến sẽ mở rộng sang các loại sơ đồ phổ biến khác trong tương lai
    • Cạnh tranh tốt cho đổi mới, và có nhiều lựa chọn thì tốt cho tất cả mọi người. Nhất thiết phải đặc biệt sao?
  • Hình ảnh “Theme Customization in Toolbar” không được render

  • Bản thân dự án thì hay, nhưng về mặt triết lý thì tôi thấy đáng nghi ngại
    Mermaid muốn trở thành Markdown của sơ đồ, nên điều quan trọng nhất là có thể chỉnh sửa và sử dụng bằng văn bản thuần túy. Nếu phải dùng trình chỉnh sửa trực quan, tôi không hiểu tại sao không dùng một công cụ mạnh hơn và thoát khỏi định dạng hạn chế đó
    Cái này giống các trình chỉnh sửa Markdown kiểu WYSIWYG. Tất nhiên chắc vẫn có thị trường ngách, nhưng nếu vậy thì dùng Google Docs hay MS Word chẳng phải được sao