WARUM sollten Blazor-Komponentenparameter die automatischen Eigenschaften sein?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 WARUM sollten Blazor-Komponentenparameter die automatischen Eigenschaften sein?

Post by Anonymous »

Aus der offiziellen Microsoft-Dokumentation:

Komponentenparameter sollten als auto-properties deklariert werden, was
das bedeutet Sie sollten keine benutzerdefinierte Logik in ihren Get- oder Set-Accessoren enthalten. Beispielsweise ist die folgende StartData-Eigenschaft eine
automatische Eigenschaft:
csharp [Parameter] public DateTime StartData { get; set; }

https://learn.microsoft.com/en-us/aspne ... etcore-9.0

Nun, das ist das Dogma, weil ich keine Rechtfertigung sehe.
Ich stimme zu, dass es nicht das Komplizierte geben darf Logik, aber es gibt den wichtigen Fall, in dem die einfache Logik sein muss - Es ist die Validierung.
Beispiel
Der Wert des theme-Parameters der AdmonitionBlock-Komponente muss entweder das Element von sein StandardThemes-Enumeration oder das Element der CustomThemes-Enumeration, das vor der Verwendung der AdmonitionBlock-Komponente über die Methode defineThemes definiert werden muss:
public partial class AdmonitionBlock : Microsoft.AspNetCore.Components.ComponentBase

{

public static string CSS_NAMESPACE = "AdmonitionBlock";

public enum StandardThemes { regular }

protected internal static Type? CustomThemes;

public static void defineThemes(Type CustomThemes)
{
YDF_ComponentsHelper.ValidateCustomTheme(CustomThemes);
AdmonitionBlock.CustomThemes = CustomThemes;
}

protected string _theme = AdmonitionBlock.StandardThemes.regular.ToString();

[Microsoft.AspNetCore.Components.Parameter]
public object theme
{
get => this._theme;
set => YDF_ComponentsHelper.
AssignThemeIfItIsValid(value, AdmonitionBlock.CustomThemes, ref this._theme);
}

protected internal static bool mustConsiderThemesCSS_ClassesAsCommon = YDF_ComponentsHelper.areThemesCSS_ClassesCommon;

public static void considerThemesAsCommon()
{
AdmonitionBlock.mustConsiderThemesCSS_ClassesAsCommon = true;
}

[Microsoft.AspNetCore.Components.Parameter]
public bool areThemesCSS_ClassesCommon { get; set; } =
YDF_ComponentsHelper.areThemesCSS_ClassesCommon || AdmonitionBlock.mustConsiderThemesCSS_ClassesAsCommon;

}

Die Validierung wird von der ComponentsHelper-Klasse ausgeführt (nicht nur für die AdmonitionBlock -Komponente):
public abstract class ComponentsHelper
{

public static bool areThemesCSS_ClassesCommon = false;

public static void ValidateCustomTheme(Type CustomThemes)
{
if (!CustomThemes.IsEnum)
{
throw new CustomYDF_ThemeIsNotEnumerationException();
}
}

public static void AssignThemeIfItIsValid(object value, Type? customThemes, ref string _theme)
{

if (value is TStandardThemes standardTheme)
{
_theme = $"{ standardTheme }";
return;
}

string stringifiedThemeValue = value.ToString() ?? "";

if (customThemes is not null)
{

Type customThemesType = customThemes;

if (customThemesType.IsEnum && Enum.GetNames(customThemesType).Contains(stringifiedThemeValue))
{
_theme = stringifiedThemeValue;
return;
}

}

throw new InvalidThemeParameterForYDF_ComponentException();

}

}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post