Refactor group mode switching logic to ensure proper list management
Updated the Group and UpdateGroupCommandHandler classes to clarify the behavior of group mode switching. The transition to dynamic mode now clears the existing item list to prevent old items from interfering with the new rule-based composition. Enhanced documentation and comments to explain the implications of mode changes. Updated tests to reflect the new behavior, ensuring that the group correctly handles item lists during mode transitions. Localization strings were also updated to inform users about the changes in item management during mode switching.
This commit is contained in:
+15
-9
@@ -34,9 +34,15 @@ public sealed class UpdateGroupCommandHandler(
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Переход в статический режим материализует вычисленный состав: правило домен не понимает,
|
||||
/// а группа не должна опустеть от смены режима — на неё уже ссылаются слоты. Обратный переход
|
||||
/// домен делает сам (список становится закреплённым).
|
||||
/// Смена режима набора. Домен сбрасывает список позиций — в двух режимах он значит разное,
|
||||
/// — а прикладной слой достраивает то, чего домену знать не положено.
|
||||
///
|
||||
/// В статическом режиме список и есть состав, поэтому переход туда материализует вычисленный
|
||||
/// правилом: группа не должна опустеть от смены режима — на неё уже ссылаются слоты.
|
||||
///
|
||||
/// В динамическом состав считает правило, а список хранит только ручные поправки — и начинается
|
||||
/// он пустым. Прежние позиции, перенесённые закреплёнными, отменяли бы сам переход: сузить набор
|
||||
/// правилом было бы нечем.
|
||||
/// </summary>
|
||||
private async Task SwitchModeAsync(
|
||||
Domain.Programming.Group group,
|
||||
@@ -44,14 +50,14 @@ public sealed class UpdateGroupCommandHandler(
|
||||
CancellationToken cancellationToken
|
||||
)
|
||||
{
|
||||
if (mode == GroupMode.Dynamic)
|
||||
{
|
||||
group.SetMode(mode);
|
||||
return;
|
||||
}
|
||||
// Состав считаем до смены режима: после неё правило уже применяется к пустому списку.
|
||||
var composition =
|
||||
mode == GroupMode.Static
|
||||
? await dynamicResolver.ResolveAsync(group, cancellationToken)
|
||||
: [];
|
||||
|
||||
var composition = await dynamicResolver.ResolveAsync(group, cancellationToken);
|
||||
group.SetMode(mode);
|
||||
|
||||
foreach (var element in composition)
|
||||
group.AddElement(element.Kind, element.Id);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user