lsFusion: Khi một ngôn ngữ thay thế cả ORM lẫn SQL thuần
lsFusion là platform open-source cho phép build hệ thống thông tin với một ngôn ngữ duy nhất, không cần ORM, không cần viết SQL thủ công.
Nguyễn Nhật Long
@nguyennhatlong1303
Mình đã làm việc với khá nhiều stack khác nhau từ Spring + Hibernate, Django ORM, đến TypeScript với Prisma. Và một vấn đề mình gặp đi gặp lại mãi là cái gọi là object-relational impedance mismatch tức là sự lệch pha giữa cách bạn nghĩ về data trong code (objects, relations) và cách database thực sự lưu trữ nó (tables, rows, joins). ORM giải quyết được một phần, nhưng lại sinh ra một đống vấn đề khác: N+1 queries, lazy loading bất ngờ, và những lúc bạn phải bypass ORM để viết raw SQL vì performance.
lsFusion đến với một hướng tiếp cận khác hẳn: thay vì cố bridge hai thế giới đó lại, họ xây dựng một ngôn ngữ mới ngôn ngữ thế hệ thứ 5 theo cách họ gọi nơi mà ranh giới giữa "code logic" và "database query" gần như không còn tồn tại.
Cái platform này thực ra làm gì?
lsFusion là một open-source platform để build information systems kiểu ERP, CRM, accounting software, warehouse management, những hệ thống mà data model phức tạp và business logic dày đặc. Nó không phải framework web thông thường, cũng không phải low-code tool theo nghĩa kéo thả. Nó là một ngôn ngữ lập trình đầy đủ kèm theo runtime, client-server infrastructure, và UI engine.
Cái hay nhất mình thấy ở đây là triết lý "single language for data". Trong lsFusion, bạn định nghĩa properties (tương đương computed fields hoặc columns), actions (business logic), và forms (UI) tất cả trong cùng một ngôn ngữ. Platform tự quyết định cái gì nên chạy trên DB, cái gì nên chạy trên application server.
Incremental computing và reactivity không phải marketing speak
Một trong những feature mình thấy thực sự ấn tượng là absolute reactivity. Nghe có vẻ buzzword, nhưng thực ra nó có nghĩa cụ thể: mọi computed data trong hệ thống đều tự động được recalculate khi data nguồn thay đổi. Không phải bạn phải manually invalidate cache hay viết trigger. Platform handle toàn bộ dependency graph đó.
Ví dụ bạn có một property totalRevenue được tính từ orders, orderItems, và discounts. Khi bất kỳ record nào trong ba table đó thay đổi, totalRevenue tự cập nhật dù bạn đang hiển thị nó trên form hay đang dùng nó trong một action khác.
Theo kinh nghiệm của mình, đây là thứ mà các team thường phải tự implement bằng event sourcing hoặc materialized views + triggers, và luôn luôn có edge cases bị miss. lsFusion làm điều này ở tầng platform.
Dynamic physical model cái này khá độc
Bình thường khi bạn muốn materialize một computed value (tức là lưu nó vào DB thay vì tính mỗi lần query), bạn phải viết migration, thêm column, update indexes. Trong lsFusion, bạn có thể làm điều này runtime quyết định property nào nên được lưu vào table nào, thêm hoặc xóa materialization mà không cần viết migration thủ công.
Đây là thứ mà mình nghĩ sẽ cực kỳ hữu ích khi hệ thống đang chạy production và bạn cần optimize performance của một số computed fields mà không muốn downtime.
So sánh với các approach phổ biến
| Tiêu chí | lsFusion | Spring + JPA | Django ORM | Raw SQL + stored procs |
|---|---|---|---|---|
| Object-relational gap | Không có | Cao | Trung bình | Không có |
| Query optimization | Tự động | Manual (fetch strategies) | Hạn chế | Manual |
| Reactivity | Built-in | Phải tự implement | Phải tự implement | Phải tự implement |
| Learning curve | Cao (ngôn ngữ mới) | Trung bình | Thấp | Thấp-Trung bình |
| UI generation | Built-in | Không | Có (admin) | Không |
| Ecosystem | Nhỏ | Rất lớn | Lớn | N/A |
| Phù hợp với | ERP/CRM/IS phức tạp | General purpose | Rapid prototyping | Legacy systems |
Client-server architecture không phải REST thông thường
lsFusion có cả desktop client (Java) lẫn web client. Điểm đặc biệt là communication protocol của nó được optimize để minimize round-trips: mỗi user action chỉ sinh ra một request/response pair duy nhất, thường là async. Desktop client còn compress và encrypt data transfer qua TCP/IP.
Mình thấy cái này hay ở chỗ: với các enterprise application phức tạp, số lượng round-trips thường là bottleneck lớn hơn là payload size. Nhiều framework hiện đại vẫn đang giải quyết vấn đề này bằng GraphQL batching hay React Server Components, trong khi lsFusion đã design điều này vào core từ đầu.
Codebase nhìn như thế nào?
Repo có khoảng 23,000+ commits, cấu trúc khá rõ ràng:
1platform/2├── api/ # Core API definitions3├── server/ # Application server4├── desktop-client/ # Java Swing desktop client5├── web-client/ # Web client6├── docs/ # Documentation7└── build/ # Build configuration
Project dùng Maven (pom.xml), có compose.yaml cho Docker setup, và có cả file CLAUDE.md, GEMINI.md, AGENTS.md tức là team đang actively integrate AI coding assistants vào workflow của họ. Mình thấy đây là dấu hiệu tốt về mức độ active của project.
License là LGPL-3.0 tức là bạn có thể dùng nó trong commercial project mà không cần open source toàn bộ code của bạn, chỉ cần modifications cho lsFusion platform itself phải được share lại.
Constraints system enterprise-grade data integrity
Một feature khác đáng chú ý là constraints on any data, kể cả computed data. Không giống database constraints thông thường chỉ áp dụng được cho stored columns, lsFusion cho phép bạn define constraint trên bất kỳ computed property nào. Và những constraints này là global không thể bypass bằng cách viết query trực tiếp hay dùng một transaction khác.
Anh em làm enterprise software sẽ hiểu tại sao cái này quan trọng. Bao nhiêu lần data integrity bị break vì ai đó viết một script maintenance mà quên check business rules?
Ai nên dùng, ai không nên?
Nên thử nếu:
- Bạn đang build ERP, CRM, accounting, hoặc bất kỳ information system nào có data model phức tạp và nhiều business rules
- Team sẵn sàng invest time học một ngôn ngữ mới để đổi lấy productivity về lâu dài
- Performance của complex queries và data consistency là priority hàng đầu
- Bạn cần rapid iteration trên business logic mà không muốn viết boilerplate
Không phù hợp nếu:
- Bạn cần build một web app thông thường, API service, hay microservice
- Team nhỏ và không có bandwidth để học paradigm mới
- Bạn cần tích hợp với ecosystem rộng (lsFusion ecosystem còn khá nhỏ 207 stars, 40 forks tại thời điểm viết bài này)
- Project cần nhiều frontend customization UI của lsFusion khá opinionated
Developer experience thực tế
Mình phải thành thật: learning curve của lsFusion cao hơn đáng kể so với dùng một framework thông thường. Bạn phải học một ngôn ngữ mới với syntax và paradigm riêng. Documentation có, nhưng community nhỏ nghĩa là khi gặp edge case bạn sẽ khó tìm được StackOverflow answer.
Tuy nhiên, với đúng use case đặc biệt là các hệ thống business phức tạp mà team đang vật lộn với ORM complexity và data consistency cái investment đó có thể worth it. Concept của nó khá solid và những vấn đề nó giải quyết là real problems mà mình đã tự mình đối mặt nhiều lần.
Nếu bạn tò mò, cách nhanh nhất để thử là dùng compose.yaml trong repo chạy docker compose up và có ngay một environment để explore. Docs của họ ở docs/ folder và trên lsfusion.org cũng khá đầy đủ cho getting started.
Mình sẽ không nói đây là silver bullet, nhưng đây là một trong số ít project mà mình thấy đang tackle đúng vấn đề thay vì chỉ là một wrapper khác cho những thứ đã có.
Nguyễn Nhật Long
@nguyennhatlong1303Nguyễn Nhật Long is a Senior Frontend Engineer and Frontend Team Leader with 7 years of experience building real-time fintech platforms. Specializing in React, Next.js, TypeScript, and React Native, shipping 10+ products across Web, Mobile, Telegram Mini-Apps, and Web3.
Thấy hay? Chia sẻ cho bạn bè!