Connect with us

Entwicklung & Code

.NET 11.0 Preview 7 bringt viele Neuigkeiten und Breaking Changes


.NET 11.0 Preview 7 gibt es kostenfrei zum Download bei Microsoft. Dabei handelt es sich um die letzte Preview-Version vor dem ersten Release Candidate. Parallel dazu ist ein Update für Visual Studio 2026 Insiders auf die Version 12106.202 erschienen.

Weiterlesen nach der Anzeige


Dr. Holger Schwichtenberg

Dr. Holger Schwichtenberg

Dr. Holger Schwichtenberg hat Fachbücher zu .NET 10.0, C# 14.0, Blazor 10.0 und Entity Framework Core 10.0 veröffentlicht. Er arbeitet als Berater und Trainer bei www.IT-Visions.de.


Installation des .NET 11.0 SDK in der Version Preview 7 (Abb. 1)

Installation des .NET 11.0 SDK in der Version Preview 7 (Abb. 1)

Installation des .NET 11.0 SDK in der Version Preview 7 (Abb. 1)

Die Sprachkonstrukte break zum Abbrechen und continue zum vorzeitigen Fortsetzen von Schleifen gibt es in den meisten Programmiersprachen, so auch in C# seit der ersten Version. Nun ergänzt Microsoft aber eine bislang in C# fehlende Option: Entwicklerinnen und Entwickler können hinter break und continue jeweils Namen angeben, die sich auf äußere Schleifen beziehen. Damit kann der Compiler nicht nur die jeweils direkt umgebende Schleife, sondern auch übergeordnete Schleifen abbrechen oder vorzeitig fortsetzen. Ein solches Label kann man bei den Schleifenkonstrukten for, foreach, while und do sowie bei der Verzweigung mit switch einsetzen.


betterCode() .NET 11.0

betterCode() .NET 11.0

(Bild: King / stock.adobe.com)

Das ist neu in .NET 11.0: Dr. Holger Schwichtenberg und weitere Experten präsentieren am 17. November 2026 auf der Online-Konferenz betterCode() .NET 11.0 die Änderungen für Entwicklerinnen und Entwickler. Tickets zum Frühbucherpreis sind im Online-Shop verfügbar.

Das folgende Listing zeigt dazu ein Beispiel, in dem vermieden wird, dass die drei Schleifenebenen jeweils einzeln abgebrochen werden müssen, wenn ein passender Regalplatz gefunden wurde.


public void Run()
 {
  List Gaenge = ["A", "B", "C", "D", "E"];
 
  // bool sackgasse = false; // --> nicht notwendig dank continue mit Label
  // bool gefunden = false; --> nicht notwendig dank break mit Label
 
 regalgangSchleife:
  foreach (var regalgang in Gaenge)
  {
   for (int regal = 1; regal <= 20; regal++)
   {
    for (int platz = 1; platz <= 50; platz++)
    {
     // Sackgasse: In einigen Regalen gibt es Sackgassen
     if (regal % 2 == 1 && platz % 13 == 0)
     {
      CUI.Warning($"Sackgasse: Gang={regalgang}/Regal={regal}/Platz={platz}");
      // sackgasse = true; --> nicht notwendig dank continue mit Label
      continue regalgangSchleife;
 
     }
     CUI.Print($"Prüfe Gang={regalgang}/Regal={regal}/Platz={platz}");
 
     bool istFrei = IstFrei(regalgang, regal, platz);
     bool istGrossGenug = IstGrossGenug(regalgang, regal, platz);
 
     if (istFrei && istGrossGenug)
     {
      CUI.Success($"Gefunden: Gang={regalgang}/Regal={regal}/Platz={platz}");
 
      // gefunden = true; --> nicht notwendig dank break mit Label
      break regalgangSchleife;
     }
    }
    // if (sackgasse) continue; --> nicht notwendig dank continue mit Label
    // if (gefunden) break; --> nicht notwendig dank break mit Label
   }
   // if (sackgasse) continue; --> nicht notwendig dank continue mit Label
   // if (gefunden) break; --> nicht notwendig dank break mit Label
  }
 }


Listing 1: Einsatz von Labels bei break und continue

Weiterlesen nach der Anzeige


Der Compiler prüft, ob sich der hinter break oder continue angegebene Bezeichner auf eine Schleife oder ein switch bezieht (Abb. 2).

Der Compiler prüft, ob sich der hinter break oder continue angegebene Bezeichner auf eine Schleife oder ein switch bezieht (Abb. 2).

Der Compiler prüft, ob sich der hinter break oder continue angegebene Bezeichner auf eine Schleife oder ein switch bezieht (Abb. 2).

Blazor Server ist eine Variante von Blazor, bei der C#-Programmcode auf dem Webserver läuft und den Webbrowser über eine Circuit genannte Websocket-Verbindung aktualisiert, sodass für Benutzer das Erlebnis einer Single-Page-Webanwendung entsteht. Eine Herausforderung ist bei Blazor Server stets der Ressourcenverbrauch auf dem Webserver, denn alle angeschlossenen Webbrowser teilen sich Prozessorleistung und RAM des Webservers.

Seit .NET 10.0 kann man jeden einzelnen Circuit per JavaScript-Code pausieren via Blazor.pauseCircuit() sowie den Zustand im RAM oder einer Datenbank persistieren und später wiedererwecken via Blazor.resumeCircuit(), um Ressourcen auf dem Webserver zu sparen, wenn ein Benutzer die Browserregisterkarte mit der Blazor-Anwendung verlässt. Seit .NET 11.0 Preview 4 ist das Pausieren von Circuits auch per C#-Code via RequestCircuitPauseAsync() möglich.

Die Einführung von RequestCircuitPauseAsync() war die Vorbereitung für das automatische Pausieren, das es nun in Preview 7 gibt. Entwicklerinnen und Entwickler können nun im Startcode einer Blazor-Server-Anwendung einstellen, dass die Anwendung pausiert, solange die Browserregisterkarte verdeckt ist. Dafür ist ein eigenes NuGet-Paket mit Namen Microsoft.AspNetCore.Components.Server.AutoPause zu ergänzen:


Das NuGet-Paket Microsoft.AspNetCore.Components.Server.AutoPause (Abb. 3)

Das NuGet-Paket Microsoft.AspNetCore.Components.Server.AutoPause (Abb. 3)

Das NuGet-Paket Microsoft.AspNetCore.Components.Server.AutoPause (Abb. 3)

und der Startcode ist um den Aufruf AddAutoPause() zu erweitern:


app.MapRazorComponents()
    .AddInteractiveServerRenderMode()
    .WithBrowserOptions(options =>
    {
        options.AddAutoPause(pause =>
        {
            pause.HiddenDelay = TimeSpan.FromSeconds(60); // Standard: 2 Minuten
        });
    });


Im Standard geschieht das Pausieren nach zwei Minuten. Diese Zeit können Entwicklerinnen und Entwickler mit HiddenDelay ändern. Blazor Server hält sich aber nicht akribisch an die definierte Zeitspanne. So wird die Zeit verlängert, wenn ein Eingabesteuerelement neue Werte enthält, wenn die Seite Audio- oder Videoinhalte mit Ton abspielt oder wenn ein JavaScript-Aufruf läuft.


Diese Blazor-Server-Anwendung war für einige Sekunden im Schlaf. Der Benutzer sieht beim Rückwechseln der Registerkarte kurz den Inhalt von ReconnectModal.razor, dann arbeitet die Anwendung weiter (Abb. 4).

Diese Blazor-Server-Anwendung war für einige Sekunden im Schlaf. Der Benutzer sieht beim Rückwechseln der Registerkarte kurz den Inhalt von ReconnectModal.razor, dann arbeitet die Anwendung weiter (Abb. 4).

Diese Blazor-Server-Anwendung war für einige Sekunden im Schlaf. Der Benutzer sieht beim Rückwechseln der Registerkarte kurz den Inhalt von ReconnectModal.razor, dann arbeitet die Anwendung weiter (Abb. 4).

Zu beachten ist, dass sich eine Komponente beim Schlafenlegen nur die Werte der mit [PersistentState] annotierten Eigenschaften oder manuell im Persistent Component State gespeicherten Objekte merkt.

Bei dem in .NET 8.0 eingeführten statischen serverseitigen Rendering (Static SSR), das man als Ablösung für ASP.NET Core MVC und ASP.NET Core Razor Pages verstehen kann, schließt Microsoft in .NET 11.0 Preview 7 eine weitere Lücke: Analog zu dem Tag Helper in den älteren Webframeworks gibt es jetzt in Blazor eine neue eingebaute Komponente . Diese Komponente merkt sich den gerenderten Inhalt für eine bestimmte Zeit und rendert den Inhalt erst nach dem Ablauf erneut. Die Zeitspanne können Entwicklerinnen und Entwickler flexibel durch

  • ExpiresAfter: Zeitspanne seit dem ersten Zugriff
  • ExpiresOn: fester Zeitpunkt oder
  • ExpiresSliding: Zeitspanne seit dem letzten Zugriff

angeben.

Mit VaryByRoute und VaryByQuery sowie VaryByUser und VaryByCulture lässt sich festlegen, dass es abweichende Zwischenspeicher für verschiedene Parameter in URL und QueryString beziehungsweise Benutzer und Sprachen geben soll.

In zwei Fällen funktioniert die -Komponente nicht:

  1. wenn die HTTP-Anfrage ein anderes Verb als GET verwendet oder
  2. wenn Stream Rendering aktiv ist, mit @attribute [StreamRendering].

Zudem lässt sich das Zwischenspeichern mit der Eigenschaft enabled="false" manuell deaktivieren.

Die von Microsoft gelieferte Razor-Komponente funktioniert nicht innerhalb eines -Elements:

"InvalidOperationException: Component 'Microsoft.AspNetCore.Components.Web.Virtualization.Virtualize`1[[System.DateTime' cannot be used inside a CacheView because its output depends on per-request state ([CacheBehavior(CacheBehavior.Throw)]) that cannot be safely cached and replayed. To fix this, move the component outside the CacheView."

Die Komponente funktioniert nur mit VaryByUser="true" und das -Tabellensteuerelement nur mit VaryByQuery.

Selbsterstellte Komponenten können mit @attribute [CacheBehavior(CacheBehavior.Throw)] angeben, dass sie nicht im funktionieren wollen. Mit @attribute [CacheBehavior(CacheBehavior.Rerender)] werden Komponenten trotz immer neu gerendert. Das geschieht auch mit den eingebauten Komponenten und .

Zwischenspeicher ist im Standard der RAM des Webservers. Durch Einsatz des NuGet-Pakets Microsoft.Extensions.Caching.Hybrid sind auch andere Speicher (etwa Redis, Datenbankmanagementsystem) als Zwischenspeicher möglich.


@page "/Cache"
@page "/Cache/{URLID:int}"
 
@code
{
 [Parameter]
 [SupplyParameterFromQuery]
 public int URLID { get; set; }
 
 [Parameter]
 [SupplyParameterFromQuery]
 public int QueryID { get; set; }
}

 URLID: @URLID
QueryID: @QueryID
zuletzt aktualisiert am @DateTime.Now

/1 /2 /3 /4 /5
QueryID=1 QueryID=2 QueryID=3 QueryID=4 QueryID=5


Listing 2: Beispiel für den Einsatz von

Fünf neue in Blazor eingebaute Analyzer warnen Entwicklerinnen und Entwickler vor falschem Programmcode:

  • BL0012 warnt, wenn ein Aufruf von StateHasChanged() nicht notwendig ist, zum Beispiel in OnInitialized(), OnInitializedAsync() und Ereignisbehandlungen.
  • Wenn GetAuthenticationStateAsync() aufgerufen wird, ohne das Ereignis AuthenticationStateChanged() zu abonnieren, warnt BL0013, weil dadurch eine Komponente mit einem veralteten Authentifizierungsstatus arbeiten kann.
  • BL0014 warnt, wenn eine Zählvariable einer for-Schleife von einer Closure oder einem Render-Fragment erfasst wird. Dadurch können alle Callbacks oder Fragmente auf den Wert der letzten Iteration verweisen.
  • Eine mit [JSInvokable] markierte Methode ist nicht öffentlich. Sie lässt sich zwar kompilieren, kann aber nicht aus JavaScript aufgerufen werden. Der Analyzer BL0015 bietet einen Code-Fix an, der die Methode public macht.
  • Wenn InvokeAsync() oder InvokeVoidAsync() außerhalb eines try-catch-Blocks aufgerufen wird, warnt BL0016. Bei einer unterbrochenen Blazor-Verbindung oder einer JavaScript-Ausnahme kann dadurch die Komponente beziehungsweise der Circuit beendet werden.

Blazor-Komponenten sollen laut Release Notes nun auch mit Union Types, die in Preview 3 eingeführt wurden, als Parameter reibungslos funktionieren. Im Schnelltest mit dieser Komponente


@code {
 
 public union ContentUnion(string, RenderFragment);
 
 [Parameter]
 public ContentUnion? Header { get; set; }
 
 [Parameter]
 public ContentUnion? Content { get; set; }
}
 

@Header.Value

@Content.Value


Listing 3: Message.razor

und diesem Aufruf



 
@DateTime.Now.ToShortDateString()
Dies ist fett und das ist kursiv!


gab es jedoch stets den Laufzeitfehler

InvalidOperationException: Object of type 'Message' does not have a property matching the name 'ChildContent'.

Die Komponente Message.razor funktioniert hingegen reibungslos, wenn man die Parameter auf RenderFragment statt auf ContentUnion typisiert.

Wer schon Blazor-Anwendungen mit in vorherigen Preview-Versionen eingeführten Validierungs-Features nutzt – wie der clientseitigen Validierung, vereinfachten Lokalisierung von Validierungs-Fehlermeldungen und der asynchronen Validierung –, muss in Preview 7 vieles am Programmcode ändern, denn Microsoft hat die APIs noch einmal überarbeitet.

Ob beim statischen serverseitigen Rendern die clientseitige Validierung aktiv ist, steuert man nun nicht mehr über EnableClientValidation="true", sondern über DisableClientValidation="false".

Bei der Lokalisierung ist AddValidationLocalization() entfallen; stattdessen gibt man die Ressource (.resx-Datei) mit den lokalisierten Fehlermeldungen nun bei AddValidation() an:


builder.Services.AddValidation(options =>
{
    options.LocalizerProvider = (_, factory) => factory.Create(typeof(ValidationMessages));
});


Zum Glück radikal vereinfacht hat Microsoft die asynchrone Validierung, die in Preview 5 eingeführt wurde und sehr komplex war.

Nun in Preview 7 lassen sich asynchrone Validierungsannotationen schreiben, indem man von der Basisklasse AsyncValidationAttribute erbt. Diese asynchronen Validierungsannotationen verwendet man in einem Objektmodell, das man als EditContext für ein Formular verwendet. Dann kann man in der Instanz von EditContext via IsValidationPending() und IsValidationFaulted() den Status der Validierung abfragen.

Die Annotationen [ValidatableType] und [SkipValidation], die es seit .NET 10.0 gibt und seitdem als experimentell galten, erzeugen nun keine solche Warnung mehr.

In .NET 11.0 Preview 6 hatte Microsoft in der Komponente das programmgesteuerte Scrolling zu einer bestimmten Position eingeführt. Dafür gab es die neue Eigenschaft InitialIndex für die Startposition und die neue Methode ScrollToIndexAsync() für eine Bewegung zur Laufzeit. Nun wurde die Eigenschaft in InitialItemIndex und die Methode in ScrollToItemAsync() umbenannt. Das -Steuerelement bietet ab Preview 7 auch InitialItemIndex und ScrollToItemAsync an.

Zahlreiche weitere Breaking Changes in ASP.NET Core 11.0 Preview 7 findet man in den Release Notes.



Source link

Entwicklung & Code

Microsoft leitet letzte Phase für SQL Data Sync ein


Microsoft hat die nächste Stufe bei der Einstellung von SQL Data Sync gezündet: Seit dem 9. September lassen sich in Azure-Abonnements, die den Dienst bislang nicht genutzt haben, keine neuen SQL-Data-Sync-Bereitstellungen mehr anlegen. Bestehende Nutzer können Sync-Gruppen und Mitgliedsdatenbanken dagegen noch bis zum vollständigen Aus des Dienstes am 30. September 2027 erstellen, ändern und betreiben.

Weiterlesen nach der Anzeige

Die Einstellung hatte Microsoft bereits 2024 mit dreijähriger Übergangsfrist angekündigt. SQL Data Sync gleicht ausgewählte Daten zwischen mehreren Datenbanken ab, sowohl zwischen Azure SQL Database als auch mit SQL-Server-Instanzen im eigenen Rechenzentrum. Die Daten können dabei je nach Konfiguration in beide Richtungen fließen. Microsoft beschreibt die Einstellung und die vorgesehenen Migrationspfade in seiner Dokumentation.

Die neue Einschränkung trifft ausdrücklich ausschließlich Azure-Abonnements, die SQL Data Sync zuvor nie eingesetzt haben. Für Abonnements, die SQL Data Sync bereits nutzen, ändert sich zunächst nichts: Administratoren dürfen weiterhin Sync-Gruppen anlegen und verwalten sowie Datenbanken als Mitglieder hinzufügen. Microsoft will damit verhindern, dass kurz vor dem Endtermin noch neue Abhängigkeiten von dem auslaufenden Dienst entstehen. Die Details zur nun begonnenen letzten Ausmusterungsphase nennt Microsoft im Azure-SQL-Blog.

SQL Data Sync organisiert die Replikation in Sync-Gruppen nach einem Hub-and-Spoke-Prinzip. Als Hub dient stets eine Azure SQL Database; weitere Azure-SQL-Datenbanken oder SQL-Server-Datenbanken können als Mitglieder teilnehmen. Bei lokalen SQL-Server-Datenbanken ist zusätzlich ein lokaler Sync-Agent nötig. Der Dienst kann Daten in beide Richtungen oder nur vom Hub zu einem Mitglied beziehungsweise umgekehrt übertragen.

Microsoft rät betroffenen Organisationen, zunächst alle vorhandenen Bereitstellungen zu erfassen – auch inaktive Sync-Gruppen. Dazu gehören Hub- und Mitgliedsdatenbanken, gegebenenfalls installierte Sync-Agenten sowie die Anwendungen, die auf replizierte Daten angewiesen sind. In kleineren Umgebungen lassen sich die Sync-Gruppen über den Bereich „Sync to other databases“ einer Azure SQL Database im Azure-Portal prüfen. Für größere Azure-Landschaften verweist Microsoft auf die PowerShell und die Azure-SQL-Management-REST-API.

Vor der Umstellung sollten Administratoren außerdem Datenfluss, Synchronisierungsrichtung, Intervall, Datenvolumen sowie Anforderungen an Latenz und Verfügbarkeit festhalten. Das ist wichtig, weil SQL Data Sync kein einheitliches Nachfolgeprodukt erhält. Je nach bisherigem Einsatz kann die Migration eine bloße Umkonfiguration sein oder einen Umbau der Replikationsarchitektur erfordern.

Weiterlesen nach der Anzeige

Für geplante oder inkrementelle Übertragungen nennt Microsoft Azure Data Factory als Alternative. Das eignet sich etwa, wenn Daten in festen Intervallen für ein Data Warehouse oder einen Reporting-Bestand kopiert werden sollen. Für die einseitige Verteilung von SQL Server zu Azure SQL Database verweist der Konzern auf die transaktionale Replikation.

Geht es vor allem um lesende Replikate oder regionale Verfügbarkeit, kommen etwa aktive Georeplikation und Read Replicas infrage. Für Reporting-Replikate vollständiger Datenbanken nennt Microsoft Always On Availability Groups bei SQL Server auf Azure-VMs sowie Managed Instance Link bei Azure SQL Managed Instance. Daneben führt die Migrationsdokumentation Azure Functions mit Azure-SQL-Triggern für anwendungsspezifische Synchronisation sowie Mirroring in Microsoft Fabric für Analyseumgebungen auf. Welche Variante passt, hängt unter anderem von Quell- und Zielplattform, Datenrichtung, Topologie, zulässiger Verzögerung und Durchsatz ab. Die Migrationsdokumentation enthält dazu eine Übersichtstabelle, die alle Pfade nach Quell- und Zielplattform aufschlüsselt.

Nach erfolgreicher Validierung der Ersatzlösung in einer Nicht-Produktivumgebung empfiehlt Microsoft, die automatische Synchronisierung der bisherigen Gruppe vorübergehend abzuschalten. Erst wenn Anwendungen nicht mehr auf SQL Data Sync angewiesen sind, sollten Unternehmen die alten Ressourcen entfernen. Spätestens zum 30. September 2027 muss der Umstieg abgeschlossen sein.


(fo)



Source link

Weiterlesen

Entwicklung & Code

Neu in .NET 10.0 [40]: JSON Patch zum reinen Testen von Werten


Um Werte zu testen, ohne etwas zu ändern, lässt sich in .NET 10.0 JSON Patch verwenden.

Weiterlesen nach der Anzeige


Der Dotnet-Doktor – Holger Schwichtenberg

Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

Das folgende Beispiel zeigt die Anwendung der neuen Klasse JsonPatchDocument aus System.Text.Json Version 10.0 auf ein JSON-Patch-Dokument, dass nur aus Test-Operationen besteht:


CUI.H2("Testen mit JSON Patch-Dokument");
string jsonPatchTest = """
[
    { "op": "test", "path": "/FirstName", "value": "Dr. Holger" },
{ "op": "test", "path": "/PrivateEmail", "value": null},
    { "op": "test", "path": "/PrivateWebsite", "value": null},
    { "op": "test", "path": "/Address/ZipCode", "value": "45257" }
]
""";
 
// JSON Patch-Dokument laden
JsonPatchDocument? patchTestDoc = JsonSerializer.Deserialize>(jsonPatchTest);
 
// JSON Patch-Dokument anwenden auf das Person-Objekt
patchTestDoc!.ApplyTo(person, patchError => CUI.PrintError(patchError.ErrorMessage));


In diesem Fall gibt es keine Fehlerausgabe. Wenn man das JSON-Patch-Dokument aber verändert


CUI.H2("Reines Testen eines Objekts mit JSON Patch-Dokument (absichtlich mit drei Fehlern!)");
string jsonPatchTest = """
[
    { "op": "test", "path": "/FirstName", "value": "Dr.Holger" },
    { "op": "test", "path": "/PrivateEmail", "value": null},
    { "op": "test", "path": "/PrivateWebsite", "value": ""},
    { "op": "test", "path": "/Address/ZipCode", "value": "45251" }
]
""";


bekommt man drei Fehlermeldungen:


Screenshot

Screenshot

Drei Fehler zeigt die Ausgabe (Abb. 1).

Dabei ist die Fehlermeldung bei 'PrivateWebsite' ungünstig, denn sie unterscheidet nicht zwischen Leerstring und Null. Im Objekt steht null, getestet wird auf Leerstring. In der Fehlermeldung steht jedoch in beiden Fällen ' '.

Weiterlesen nach der Anzeige


(rme)



Source link

Weiterlesen

Entwicklung & Code

Kommentar: Wenn Transparenz mit einem Rätsel beginnt


In weniger als vier Monaten sollen die Deutschen ihren Ausweis, Führerschein und vielleicht irgendwann auch ihr Schulzeugnis und den Kaninchenzuchtstammbaum auf dem Smartphone vorzeigen können. Eine Brieftasche als App halt. Ein echter, guter Fortschritt – den die EU ja auch erzwingt. Angesichts des offensichtlichen Security-Schabernacks ist das aber auch ein Projekt, das dringend Vertrauen bei den Bürgern aufbauen muss. Der neue Name, den Bundesdigitalminister Karsten Wildberger (CDU) dafür bei einer Veranstaltung in Berlin verkündet hat, lautet: d-you.

Weiterlesen nach der Anzeige


Ein Kommentar von Moritz Förster

Ein Kommentar von Moritz Förster

Moritz Förster schreibt seit 2012 für die iX und heise online. Er betreut neben dem iX-Channel den Bereich Arbeitsplatz.

Stop mal – d-you. Was ist denn das? Eine Dating-App? Ein Jugendportal? Ein Motivationspodcast? Wer nicht ohnehin schon von der EUDI-Wallet gehört hat, wird daraus niemals schlau und installiert die App schon einmal gar nicht. So wird ein dämlicher Name zu einem unnötigen Problem.

Natürlich entscheidet kein Name allein darüber, ob eine Technologie bei IT-affinen Nutzern angenommen wird oder nicht. Sicherheit, Datenschutz, einfache Einrichtung und echte Anwendungsfälle zählen da mehr. Aber der Name ist der erste Berührungspunkt für den Otto-Normal-Bürger. Der kommt dann noch nicht einmal zum Download, liest den verklausulierten Datenschutzhinweis oder erkundet die tollen Funktionen in der App. Ein guter Name beantwortet schon davor und in Millisekunden die Frage: Worum geht es hier, und ist das etwas für mich?

Die Technikakzeptanzforschung weiß das seit Jahrzehnten. Fred Davis zeigte bereits 1989 in seinem Technology Acceptance Model, dass Menschen neue Technologien vor allem dann nutzen, wenn sie deren Nutzen verstehen und sie als leicht handhabbar wahrnehmen. Spätere Forschung ergänzte soziale Einflüsse und Rahmenbedingungen. Was all diese Modelle gemeinsam haben: Der erste kognitive Eindruck zählt. Und im Gegensatz dazu erzeugt ein Name, der keine Orientierung gibt, Reibung – und zwar noch bevor jemand die Funktionen der App überhaupt wahrgenommen hat.

Weiterlesen nach der Anzeige

Die berechtigte Kritik an d-you ist keine Kulturkritik an Anglizismen. Kunstnamen können funktionieren. Apple erklärt keine Computer, O2 erklärt keinen Mobilfunk. Aber private Marken kaufen sich über Jahre Bedeutung ein: durch Werbung, durch Nutzung, durch Wiederholung. Eine staatliche Identitätsinfrastruktur startet unter anderen Bedingungen. Sie und das Technikkonzept sind für die Bürger neu. Sie berührt sensible Daten. Und sie muss von möglichst vielen Menschen verstanden und genutzt werden, damit sie sich durchsetzt. Dafür genügen nicht nur wenige Early Adopter, die sich ohnehin für digitale Verwaltung interessieren.

d-you ist dabei nicht einmal ein besonders starker Kunstname. Das „d“ könnte für Deutschland stehen, muss es aber nicht. „you“ verspricht Individualität, sagt aber nichts über die Funktion. Der Bindestrich macht die Schreibweise erklärungsbedürftig. Und die Aussprache? „Di-ju“? „Dü“? In Behördenbriefen, Suchmaschinen und mündlicher Weitergabe werden schon bald Varianten kursieren. Vor allem aber: Kein Wort im Namen verrät, dass es hier um Ausweis, Nachweise oder digitale Identität geht. d-you ist also nicht zu Englisch, sondern zu leer.

Mein Gegenvorschlag: schlicht „Digitale Brieftasche“ und gut ist. Das ist technisch gesehen natürlich keine perfekte Bezeichnung. Eine Brieftasche liegt in der Tasche, ist offline, gehört einem allein. Und eine staatliche Wallet ist Software, Sicherheitsarchitektur und Schnittstelle zu Behörden und Unternehmen zugleich. Die EU-Kommission beschreibt die EUDI-Wallet als Ort für digitale Identitätsdaten und attestierte Nachweise. Die Metapher hängt sich also in vielen Details auf.

Aber sie stimmt im Wesentlichen: Eine Brieftasche verwahrt persönliche Dokumente, gibt sie auf Nachfrage vor und bleibt unter der Kontrolle ihres Besitzers. Das ist genau das, was die Wallet verspricht. Die Metapher ist eben ein brauchbarer Einstieg. Und genau deshalb hätte man sie nicht durch einen Fantasienamen ersetzen müssen.

Wildberger betonte bei der Vorstellung, wie wichtig ihm Kontrolle und Transparenz für die Bürgerinnen und Bürger seien. Das ist das offensichtlich richtige Versprechen. Aber wer Datensouveränität verspricht, sollte nicht mit sprachlicher Intransparenz beginnen.


(fo)



Source link

Weiterlesen

Beliebt