Dart Backend Practices at Xianyu: Glue Layer Development

Xianyu’s tech team adopted Dart for a backend glue layer that bridges frontend Flutter clients and Java domain services, leveraging Dart’s familiar syntax, strong async/await support, isolates for rapid hot‑replaceable development, and parallel Future.wait calls to achieve high‑performance, low‑latency APIs with fast deployment.

Xianyu Technology
Xianyu Technology
Xianyu Technology
Dart Backend Practices at Xianyu: Glue Layer Development

This article describes how the Xianyu tech team adopted Dart as the language for the backend “glue layer” that coordinates between frontend clients and Java‑based domain services.

The team chose Dart because its syntax is familiar to Java/Python/JS developers, it offers strong asynchronous support (Future, async/await), and it enables a unified language across frontend (Flutter) and backend, allowing frontend engineers to write backend code.

Dart’s asynchronous model lets IO‑heavy glue‑layer code be written in a near‑synchronous style while achieving the performance benefits of true async, reducing overall response time by waiting for multiple IO calls in parallel.

To improve development efficiency, the team built an isolated development environment using Dart isolates, giving each engineer a unique, hot‑replaceable sandbox that deploys changes in seconds instead of minutes.

The architecture separates stable domain services (implemented in Java) from the fast‑changing glue layer (Dart). The glue layer fetches data from Java services via HSF, processes and assembles it, and exposes the result as MTOP HTTP endpoints for the client.

Sample code shows a Java synchronous method versus a Dart async version that uses Future.wait to parallelize two service calls, illustrating the clarity and performance gain.

ItemDetailDO queryItemDetail(Long itemId) {
    ItemDetailDO data = new ItemDetailDO();
    data.setBrowseCount(IdleItemBrowseService.count(itemId));
    data.setFavorCount(IdleItemFavorService.count(itemId));
    return data;
}
Future<ItemDetailDO> queryItemDetail(int itemId) async {
  var data = ItemDetailDO();
  await Future.wait([
    IdleItemBrowseService.count(itemId).then((count) => data.browseCount = count),
    IdleItemFavorService.count(itemId).then((count) => data.favorCount = count),
  ]);
  return data;
}

In production, the Dart‑based service handles up to 400 QPS with a 99.5 % success rate, and latency matches the Java counterpart, while code changes go from concept to deployment in under two minutes.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

BackendDARTMicroservicesXianyuAsynchronousisolate
Xianyu Technology
Written by

Xianyu Technology

Official account of the Xianyu technology team

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.