Paleta příkazů v JMatrixPlatform: řešení problému navigace v multimodulárních systémech
Multimodulární systémy jako JMatrixPlatform čelí přetížení uživatelského rozhraní: stovky příkazů, tlačítek a záložek komplikují navigaci i pro administrátory. Inspirováno paletou příkazů VSCode, bylo implementováno univerzální řešení — jednotný vyhledávací řádek pro dostupné příkazy uživatele. To snižuje závislost na hierarchických menu a urychluje přístup k funkcím.
Klasický problém navigace
V systémech s desítkami modulů je hlavní stránka zaplněna zkratkami, kategoriemi a podmenu. Uživatel s přístupem k 10+ procesům tráví čas hledáním: Hlavní -> MojeAkce -> Správa požadavků -> Rozdělení. Instrukce jsou nezbytné: "Rozbalte kategorii A, přejděte do B, klikněte na C."
Administrativní příkazy (aktualizace mezipaměti, synchronizace, reporty) jsou obzvláště problematické — je obtížné je umístit a zapamatovat. Všechna řešení se omezují na skupinování, které skrývá funkčnost.
Myšlenka z VSCode
Paleta příkazů VSCode je klávesnicový přístup k jakékoli funkci IDE prostřednictvím vyhledávání podle názvu. Odstraňuje spory o umístění UI prvků a umožňuje okamžité volání.
V JMatrixPlatform je architektura již připravena: jakákoli UI akce je JCommand s href, label, popisem a právy přístupu. Příkazy sestavují hlavní stránku, panely nástrojů a lišty.
Příklad příkazu Projekty:
@JModelPart
public final class ACDProjectsDesk extends JCommand {
public static ACDProjectsDesk COMMAND = new ACDProjectsDesk();
@Override
public JHref getHref(JContext ctx, JRequestParams requestParams) {
return new JHrefTable(
ATBProjectsDesk.TABLE,
JTarget.CONTENT,
Actions.TOOLBAR,
null,
AIQProjectsAll.INQUIRY,
JHrefTable.RowSelection.MULTI);
}
}
Lokalizace v messages_ru.properties:
ru.demo.matrix.schema.ui.command.ACDProjectsDesk=Projekty
Implementace s hashtagy
Pro paletu byly přidány hashtagy — filtr přístupu a sémantické vyhledávání podle synonym ("společnosti" -> "organizace").
@Override
public Set<String> getHashTags() {
return Set.of(
"dokumentový oběh",
"demonstrace",
"projekty",
"soubory");
}
Kontrolér vrací seznam dostupných příkazů:
@GetMapping("/navigator/paletteCommands")
public ResponseEntity<List<JDTOCommand>> getCommands(
@JPathContextVariable JContext ctx,
@RequestParam Map<String, String> requestParamsMap) {
JRequestParams requestParams = new JRequestParams(requestParamsMap);
Set<JCommand> commands = JModel.getAdminListByClass(JCommand.class);
List<JDTOCommand> results = commands
.stream()
.filter(cmd -> cmd.getHashTags() != null && !cmd.getHashTags().isEmpty() && cmd.show(ctx, requestParams))
.map(cmd -> new JDTOCommand(ctx, requestParams, cmd))
.toList();
return ResponseEntity.ok(results);
}
Filtrace na UI pro rychlost (až 1000 příkazů). Příklad JSON:
[
{
"name":"ACPersonDesk",
"description":"Rejstřík uživatelů platformy",
"label":"Uživatelé",
"icon":null,
"settings":{},
"href":{
"url":"../table/ATBPersonDesk",
"requestParams":{
"toolbar":"AMPersonDeskTableActions",
"rowSelection":"MULTI",
"inquiry":"AIQPersonsDesk",
"target":"CONTENT"
}
},
"hashTags":["uživatelé", "struktura podniku"]
}
]
Vyhledávání podle "projekty" okamžitě otevře správný href, nezávisle na hloubce menu.
Výhody přístupu
- Rychlý přístup: vyhledávání podle label, popisu, hashtagů.
- Kontext: hashtagy přidávají synonyma a filtrují relevantní příkazy.
- Univerzálnost: funguje pro prohlížení komponent a přímé akce.
- Škálovatelnost: nezávisí na UI struktuře, vhodné pro 100+ modulů.
- Výkon: server poskytuje seznam, klient filtruje okamžitě.
Paleta doplňuje menu, nenahrazuje ho. Administrátoři získávají rychlý přístup k vzácným funkcím bez instrukcí.
Co je důležité
- Architektura JCommand umožňuje triviální implementaci palety bez refaktoringu.
- Hashtagy řeší filtraci a sémantiku vyhledávání současně.
- Filtrace na klientovi zajišťuje rychlou reakci při 1000+ příkazech.
- Paleta snižuje kognitivní zátěž v multimodulárních ekosystémech.
- Vhodné pro inženýrské systémy s konzervativními uživateli.
— Editorial Team
Zatím žádné komentáře.