Liaison de données pour MVVM - .NET MAUI (2023)

  • article

Parcourir les exemples

Le modèle Model-View-ViewModel (MVVM) impose une séparation entre trois couches logicielles : l'interface utilisateur XAML (appelée la vue), les données sous-jacentes (appelées le modèle) et l'intermédiaire entre la vue et le modèle (appelé le ViewModel ). Les vues et les modèles de vue sont généralement connectés via des liaisons de données définies en XAML. Pouréquipe de liaisonUne vue est généralement une instance d'un modèle de vue.

Magnifique

L'interface utilisateur de l'application multiplateforme .NET (.NET MAUI) envoie des mises à jour de liaison au thread d'interface utilisateur. Lorsque vous utilisez MVVM, qui vous permet de mettre à jour les propriétés du modèle d'affichage lié aux données à partir de n'importe quel thread, le connecteur .NET MAUI transmet les mises à jour au thread d'interface utilisateur.

MVVM simple

consisteExtension de balisage XAML, vous avez appris à définir une nouvelle déclaration d'espace de noms XML pour permettre aux fichiers XAML de référencer des classes dans d'autres assemblys. Dans l'exemple ci-dessous, l'extensionx : statiqueObtenir un jeton pour la date et l'heure actuelles d'une propriété statiqueDate Heure. MaintenantplutôtSystèmenom:

(Video) .NET MAUI Data Binding with MVVM & XAML [5 of 8] | .NET MAUI for Beginners

      

Dans cet exemple, la valeur est récupéréeheure de rendez-vousdéfini commeéquipe de liaisondans undisposition des agrafes.Lorsque vous réglez suréquipe de liaisonUn élément dont héritent tous les enfants de cet élément. Cela signifie que tous les enfants ontdisposition des agrafesle mêmeéquipe de liaisonet peut contenir des liaisons aux propriétés de cet objet :

Liaison de données pour MVVM - .NET MAUI (2)

Le problème, cependant, est que la date et l'heure sont définies une fois lors de la création et de l'initialisation de la page et ne changent jamais.

Une page XAML peut afficher une horloge qui affiche toujours l'heure actuelle, mais cela nécessite un code supplémentaire. Le modèle MVVM est un choix naturel pour les applications .NET MAUI lors de la liaison de données de propriété entre des objets visuels et des données sous-jacentes. Lorsque vous pensez à MVVM, Models et ViewModels sont des classes entièrement écrites en code. Une vue est généralement un fichier XAML qui fait référence aux propriétés définies dans le modèle de vue via la liaison de données. Dans MVVM, le modèle ignore le modèle de vue et le modèle de vue ignore la vue. Cependant, vous faites généralement correspondre les types affichés par le modèle d'affichage aux types associés à l'interface utilisateur.

Remarques

Dans des exemples MVVM simples comme celui présenté ici, il n'y a généralement pas de modèle, le modèle se compose simplement d'une vue et d'un modèle de vue connectés via une liaison de données.

L'exemple suivant montre un modèle d'affichage pour une montre qui contient une classe nomméeheure de rendez-vousMettre à jour chaque seconde :

(Video) Implement MVVM and Databinding - .NET Maui Crash Course #4

à l'aide de System.ComponentModel, à l'aide de System.Runtime.CompilerServices, de l'espace de noms XamlSamples, de la classe ClockViewModel : INotifyPropertyChanged { événement public PropertyChangedEventHandler PropertyChanged ; DateHeure privée _dateTime ; (_dateTime!=Property_Changed); } } public ClockViewModel() { this.DateTime = DateTime.Now ; // Met à jour la propriété DateTime toutes les secondes. _timer = new Timer(new TimerCallback(s) => this.DateTime = DateTime.Now), null, TimeSpan.Zero, TimeSpan.FromSeconds(1)); } ~ClockViewModel() => _timer.Dispose(); public void OnPropertyChanged([CallerMemberName] string name = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));}

Viewmodel implémente généralement une interfaceINotifyPropertyChanged, qui permet aux classes de déclencher des événementschangé de propriétaireChaque fois qu'une de ses propriétés change. Le mécanisme de liaison de données dans .NET MAUI ajoute un gestionnaire pour celachangé de propriétaireafin que lorsqu'une propriété change, elle puisse être notifiée et la cible mise à jour avec la nouvelle valeur. Dans l'exemple de code précédent, la méthode gèreOnPropertyChangedDéclenchez un événement tout en déterminant automatiquement le nom source d'une propriété :heure de rendez-vous.

L'exemple suivant montre le code XAML utiliséModèle d'affichage de l'horloge:

    

Dans cet exempleModèle d'affichage de l'horlogeDéfini commeéquipe de liaisonétiquette d'élémentcontenu de la pageusage des biens. Les fichiers code-behind peuvent également créer des modèles d'affichage.

extensionficelerenregistrertextesa propriétéUne inscriptionformerheure de rendez-vouspropriété. La capture d'écran suivante montre le résultat :

Liaison de données pour MVVM - .NET MAUI (3)

Vous avez également accèsheure de rendez-vousAffichez les propriétés du modèle de vue en les séparant par des points :

MVVM interactif

MVVM est souvent utilisé avec une liaison de données bidirectionnelle pour les vues interactives basées sur le modèle de données sous-jacent.

L'exemple ci-dessous montreHslViewModelconversion uncouleurvaleurthonétaient,saturationAttendrebriller, puis encore :

(Video) .NET MAUI - XAML Data Binding and MVVM Basics

de System.ComponentModel, de System.Runtime.CompilerServices, de XamlSamples, de HslViewModel : INotifyPropertyChanged μβάν PropertyChangedEventHandler PropertyChanged ; flotteur privé _hue, _saturation, _luminosity ; si! (valeur, _saturation, _luminosité) ; } } public float Saturation { obtenir => _saturation ; set { if (_saturation != value) Color = Color.FromHsla(_hue, value , _luminosity); } } public float Luminosité { get => _φωτεινότητα ; set { if (_luminosity!= value) Color = Color.FromHsla(_hue, _saturation, value); } } public Couleur Couleur { get => _color; set { if(_color != valeur) { _color = valeur ; _hue = _color.GetHue(); _saturation = _color.GetSaturation(); _luminosité = _color.GetLuminosity(); OnPropertyChanged("Teinte"); OnPropertyChanged("Saturation"); OnPropertyChanged("Luminosité"); OnPropertyChanged ); } } public void OnPropertyChanged([CallerMemberName] string name = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); }

Dans cet exemplethonmodifier les propriétés,saturationAttendrebrillerentraîner des modificationscouleurPropriété et changementscouleurLa propriété modifie les trois autres propriétés. Ceci est similaire à une boucle infinie, sauf que le modèle de vue n'appelle pas l'événementchangé de propriétaire, sauf si la maison a été modifiée.

L'exemple XML suivant contientboîte de vueNéecouleurCette propriété est liée àcouleurafficher les propriétés du modèle et trois et troisUne inscriptionglissièreVues associéesthonCaractéristiques,saturationAttendrebriller:

            

par obligationUne inscriptionest le réglage par défautLoin.Il suffit d'afficher la valeur. La liaison par défaut pour chaqueglissièreEstrue à double sens.Ceci initialise leglissièredu modèle de visualisation. Lorsque le modèle d'affichage est créé, c'est le cascouleurla propriété a de la valeurcourse d'eau.changer unglissièreDéfinissez une nouvelle valeur pour la propriété sur le modèle de vue, puis calculez la nouvelle couleur :

Liaison de données pour MVVM - .NET MAUI (4)

Série

Parfois, une application doit aller au-delà de la propriété en demandant à l'utilisateur d'émettre des commandes qui affectent quelque chose dans le modèle d'affichage. Ces commandes sont généralement signalées en cliquant ou en touchant un bouton et sont généralement gérées dans le fichier de code derrière les gestionnaires d'événementsCliquez survanboutonL'événementennuyél'un desAppuyez sur ID de geste.

L'interface d'exécution de commande offre une alternative à l'implémentation de commande plus adaptée à l'architecture MVVM. Un modèle de vue peut contenir des commandes, qui sont des méthodes exécutées en réponse à des activités spécifiques dans la vue, telles queboutonCliquez sur. Des liaisons de données sont définies entre ces commandes etbouton.

Autorisation des liaisons de données entre unboutonvous êtes un modèle de projection, définiboutonDeux propriétés :

  • Sérievas-y mecSystem.Windows.Input.ICCommandSystem.Windows.Input.ICCommand
  • paramètres de commandevas-y mecBut

Remarques

De nombreux autres contrôles définisSérieIl y a aussi des propriétés etparamètres de commande.

(Video) XAML Data Binding and MVVM Basics (.NET MAUI, WPF, UWP, Xamarin.Forms)

L'interfaceSérieest défini dans l'espace de nomssystem.windows.inputIl se compose de deux méthodes et d'un événement :

  • exécuter non valide (paramètre d'objet)
  • booléen CanExecute (paramètre d'objet)
  • Utiliser EventHandler CanExecuteChanged

Les modèles de vue peuvent définir des propriétés de typeSérie.Vous pouvez ensuite lier ces propriétésSériela propriété de chacunboutoncomposant ou un autre composant, ou éventuellement une vue personnalisée qui implémente cette interface. Vous pouvez choisir de définirparamètres de commandepropriétés qui identifient un objet individuelbouton(ou d'autres éléments) à lier à cette propriété de modèle de vue. Interne, appelboutonIlmettre en œuvre, exécuterméthode à chaque clic de l'utilisateur,boutonje passe àmettre en œuvre, exécuterméthode sonoreparamètres de commande.

Ilpeut être effectuéeMéthodes etDes modifications peuvent être apportéesCet événement est utilisé dans les cas suivantsboutonLe robinet n'est peut-être pas valide pour le moment, doncboutonIl devrait s'éteindre. appel téléphoniqueboutonpeut être effectuéeLorsque la propriété est définie surSériepremier et chaque événementDes modifications peuvent être apportéesest activé. Imprudentpeut être effectuéeRENDEMENTInexacte, Ceboutons'éteint et ne génère pas d'appels versmettre en œuvre, exécuter.

tu peux l'utiliserSérieune sorte deSérieInclus dans .NET MAUI pour implémenter l'interfaceSérie.Ces deux classes définissent des constructeurs différents et unchangement actionnableUne méthode que le modèle d'affichage peut appeler pour appliquer l'objetSérieévénement déclencheurDes modifications peuvent être apportées.

L'exemple suivant montre le modèle d'affichage d'un clavier simple pour la saisie d'un numéro de téléphone :

en utilisant System.ComponentModel, en utilisant System.Runtime.CompilerServices, en utilisant System.Windows.Input, l'espace de noms XamlSamples, la classe KeypadViewModel : INotifyPropertyChanged{ événement public PropertyChangedEventHandler PropertyChanged ; ; char privé[] '*}_specialChars ICommand AddCharCommand { get; ensemble privé? } public ICommand DeleteCharCommand { obtenir ; ensemble privé? } chaîne publique InputString { obtenir => _inputString ; ensemble privé { if (_inputString != valeur) { _inputString = valeur ; OnPropertyChanged(); DisplayText = FormatText(_inputString); // Peut-être que le bouton de suppression devrait être activé/désactivé. ((commande)DeleteCharCommand).ChangeCanExecute(); } } } chaîne publique DisplayText { get => _displayText ; set privé { if (_displayText != value) { _displayText = value; OnPropertyChanged(); } } } public KeypadViewModel() { // Commande pour ajouter une clé à la chaîne d'entrée AddCharCommand = nouvelle commande((clé) => InputString += clé); // La commande supprime un caractère de la chaîne d'entrée si autorisé DeleteCharCommand = new Command( // La commande supprime un caractère de la chaîne d'entrée () => InputString = InputString .Substring(0 , InputString.Length - 1), // gérer CanExecute ici, retourner true s'il y a quelque chose à supprimer() => InputString.Length > 0); } string FormatText(string str) { bool hasNonNumbers = str. IndexOfAny(_specialChars) != -1; Format de chaîne = str; // formater la chaîne par type de données et longueur if (hasNonNumbers || str.Length < 4 || str.Length > 10) { // des caractères spéciaux sont présents, ou la chaîne est trop courte ou trop longue pour un formatage spécial // ne rien faire } sinon si (str.Length < 8) formaté = string.Format("{0}-{1}", str.Substring( 0, 3), str.Substring( 3)); sinon formaté = string.Format("({0}) {1}-{2}", str.Substring(0, 3), str.Substring(3, 3), str.Substring(6) ); format de retour ? } public void OnPropertyChanged([CallerMemberName] name string = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); }

Dans cet exemplemettre en œuvre, exécuterMéthodes etpeut être effectuéeL'instruction for est définie comme une fonction lambda dans le constructeur. le modèle de projection supposeAjouter une commande de dessinla propriété est liéeSériePropriétés pour plusieurs boutons (ou tout autre contrôle d'interface de commande), chacun défini par un .paramètres de commandeCes boutons ajoutent des caractèreschaîne d'entréeattribut, qui est ensuite formaté comme un numéro de téléphonetexte d'affichagepropriété. Il existe également une deuxième catégorie de biens immobiliersSérieA été appelécommande pour supprimer des caractères.Ceci est lié au bouton de retour arrière, mais doit être désactivé s'il n'y a pas de caractères à supprimer.

(Video) MVVMS... A Better MVVM? Model-View-ViewModel-Services Explained

L'exemple suivant montre le code XAML utilisé :KeyboardViewModel

    < Grid.RowDefinities>    < /Grid.RowDefinitions>                < Button Text="0" Command="{Binding AddCharCommand}" CommandParameter="0" Grid.Row="4" Grid.Column="1" /> 

Dans cet exempleSériepremière propriétéboutonC'est la même chose quecommande pour supprimer des caractères.Il a d'autres boutons qui lui sont associésAjouter une commande de dessinDansparamètres de commandeavec de l'éclat dedansbouton:

Liaison de données pour MVVM - .NET MAUI (5)

FAQs

What is MVVM in .NET Maui? ›

NET MAUI app development. MVVM is a UI design pattern for decoupling UI and non-UI code. data binding is the key technology that MVVM relies on. We will improve the design of our app using MVVM and data binding. We will also replace the data model using open source libraries.

Which markup language can you use to lay out the UI for a .NET Maui application? ›

C# Markup is a set of fluent helper methods and classes designed to simplify the process of building declarative . NET Multi-platform App UI (. NET MAUI) user interfaces in code.

Does .NET Maui have a designer? ›

There is no visual designer for producing XAML in . NET MAUI apps. All XAML must be hand-written, but you can use XAML hot reload to view your UI as you edit it.

What is MVVM binding? ›

With MVVM, you define your UI declaratively in XAML and use data binding markup to link it to other layers containing data and commands. The data binding infrastructure provides a loose coupling that keeps the UI and the linked data synchronized and routes user input to the appropriate commands.

Is .NET MAUI worth learning? ›

If you need a cross-platform UI solution that can run on any or all of Android, iOS, Mac, Windows, and potentially the Web, and you're prepared for a bit of a bumpy ride then I would say absolutely yes.

What is MVVM for beginners? ›

MVVM stands for Model, View, ViewModel. It is an architectural pattern implemented in applications to separate user interface code from data and business logic. With a clear separation of these components, all components of the app can be unit-tested, components can be reused within the app or across the app.

Does .NET MAUI use C#? ›

.NET Multi-platform App UI (.NET MAUI) is a cross-platform framework for creating native mobile and desktop apps with C# and XAML. Using .NET MAUI, you can develop apps that can run on Android, iOS, macOS, and Windows from a single shared code-base.

What is the easiest language to create a UI? ›

For someone who'd like to design a UI interface of their own, GUI Python is an easy-to-use programing language that can be mastered by almost all levels of users. Now, read on to find more cross-platform frameworks for GUI programming in Python.

Can .NET MAUI run in browser? ›

NET Multi-platform App UI (. NET MAUI) IBrowser interface. This interface enables an application to open a web link in the system-preferred browser or the external browser.

Does Oprah own Maui? ›

The talk show trailblazer already owned over 100 acres of Maui land, according to the report, meaning Winfrey now owns roughly 1,000 acres on the island. The acquisition was met with mixed reactions from local residents, some of whom worried that the purchase would contribute to the displacement of native Hawaiians.

What is the difference between NET MAUI and flutter? ›

NET MAUI supports hot reload, which allows developers to check the changes they make in the UI in real time, saving time and effort. On the other hand, Flutter provides a highly customizable and performant UI framework with a wide range of customizable UI widgets and animations.

Does .NET MAUI use XAML? ›

NET MAUI app contains three XAML files, and their associated code-behind files: The first file pairing is App. xaml, a XAML file, and App.

Why MVVM is better? ›

MVVM is better than MVC/MVP because of its unidirectional data and dependency flow. Dependency is one way, thus it is a lot easier to decouple it when we need to. It is also easier for testing. All my projects(written in Kotlin for Android app) are based on MVVM.

What is MVVM good for? ›

Advantages. MVVM facilitates easier parallel development of a UI and the building blocks that power it. MVVM abstracts the View and thus reduces the quantity of business logic (or glue) required in the code behind it.

What is the main advantage of MVVM? ›

Advantages of using MVVM Design Pattern

Your code is decoupled. The package structure is even easier to navigate. The project is even easier to maintain. Your team can add new features even more quickly.

Why Maui is better than Xamarin? ›

Greater performance: Since it uses less memory and CPU than Xamarin Forms, there will be better performance overall. Building native UI: By leveraging the same platform-specific code as other platforms, such as Android or iOS, you may generate the same look and feel for your application.

Which is better Maui or Flutter? ›

Both Flutter and . Net MAUI are powerful frameworks for cross-platform app development. However, given the thriving developer community and extensive package ecosystem, Flutter emerges as the better choice for most projects.

Is .NET MAUI easy to use? ›

NET MAUI application runs on any machine like windows or android emulator. It provides a variety of controls and widgets, and it's easy to use; you can get started with just a few lines of code. It is a set of libraries and tools that make it easy to create . NET cross-platform applications.

Who uses MVVM? ›

The pattern is often used in Windows and web graphics presentation software. The MVVM pattern is used in Windows Presentation Foundation (WPF), which runs on Microsoft's .

What is MVVM full for? ›

MVVM stands for Model, View, ViewModel. Model: This holds the data of the application.

Is MVVM a pattern or architecture? ›

MVVM is an architectural pattern, invented by Microsoft architects Ken Cooper and Ted Peters. MVVM (Model-View-ViewModel) cleanly separates the business logic of an application from the user interface. The ultimate goal of MVVM architecture is to make the view completely independent from the application logic.

Is .NET MAUI a replacement for WPF? ›

NET MAUI is an extension of what was Xamarin Forms, you can write a single piece of C# code that will run on Windows, Mac, Android, and iOS. Another big benefit of using MAUI is that you are effectively writing code in WPF (Windows Presentation Foundation). MAUI isn't WPF, but it is close.

Is Maui a replacement for Xamarin? ›

NET MAUI stands for . NET Multi-platform App UI. It is a bit of a mouthful but essentially all it is is the next iteration of Xamarin… Yes, it's Xamarin vNext, so instead of there being a Xamarin.

Is it hard to learn Xamarin? ›

Integration with Microsoft tools: Xamarin integrates well with Microsoft tools, making it easy to use for developers who are already familiar with Microsoft technologies. Easy to learn: Xamarin is easy to learn for developers who are already familiar with C# and . NET.

Can you learn UI on your own? ›

Most great UI/UX Designers are self-taught, at least when starting their careers. So, how exactly do you go about learning how to create visually appealing digital items for your own use? There isn't a single right or wrong way to learn UI/UX design because there are so many options.

What coding is needed for UI design? ›

If you are thinking of getting into UI/UX design, you probably have this question in mind. The answer is no. UI/UX design is one among numerous non-technical roles in tech that doesn't require any coding or programming skills.

Do you need to learn coding for UI? ›

UI Designers do not need to code, but it is extremely beneficial if you have programming skills. Depending on the nature of the product, it's also not unusual for UI/UX design and development to be intertwined into a single process.

How stable is .NET MAUI? ›

NET MAUI is mature with stable runtime and tooling—this essentially means lot more developers are building serious mobile/desktop apps.

Does .NET MAUI use HTML? ›

The . NET Multi-platform App UI (. NET MAUI) WebView displays remote web pages, local HTML files, and HTML strings, in an app. The content displayed a WebView includes support for Cascading Style Sheets (CSS), and JavaScript.

What is the minimum Android for .NET MAUI? ›

. NET MAUI Blazor apps have the following additional platform requirements: Android 7.0 (API 24) or higher is required. iOS 14 or higher is required.

What is the difference between Maui MVC and MVVM? ›

MVVM is refined from MVC; it supports two-way data binding between View and ViewModel. This allows automatic propagation of changes inside the state of ViewModel to the View. The MVVM pattern includes three key parts: Model: Represents the data with validation and business logic.

What does MVVM stand for? ›

Model-View-ViewModel (MVVM) is a software design pattern that is structured to separate program logic and user interface controls.

What is the difference between .NET MVC and MVVM? ›

MVVM separates the different components of the development process into three categories, model, view and ViewModel. This typically involves code markup or graphical user interfaces (GUI). MVC, or model-view-control is a way developers separate programs into these three components.

What is the main purpose of MVVM? ›

The Model-View-ViewModel (MVVM) pattern helps to cleanly separate the business and presentation logic of an application from its user interface (UI).

Is .NET MAUI same as Xamarin? ›

NET MAUI is an evolution of Xamarin. Forms, they have most of their features in common. You can get almost all things in . NET MAUI that Xamarin has, like controls, layouts, Shell, gestures, templates, and cross-platform APIs for device features.

Which framework uses MVVM? ›

The Windows Presentation Framework (WPF) takes full advantage of the Model-View-ViewModel (MVVM) pattern.

Is .NET and NET MVC same? ›

The main difference between ASP.NET Core and ASP.NET MVC 5 is their cross-platform approach. ASP.NET Core can be used on Windows, Mac, or Linux, whereas ASP.NET MVC 5 can only be used for applications on Windows. The ASP.NET Core MVC is a framework for building web apps and APIs, optimized for use with ASP.NET Core.

What is .NET vs .NET core vs MVC? ›

ASP.NET Core is the latest version of ASP.NET, and it includes many improvements over ASP.NET MVC. The most significant difference between asp net mvc vs asp net core is that it's a cross-platform framework. You can use it to build web applications that can run on Windows, Linux, or macOS.

What is the difference between .NET and .NET MVC? ›

Asp.Net Web Form has built-in data controls and best for rapid development with powerful data access. Asp.Net MVC is lightweight, provide full control over markup and support many features that allow fast & agile development. Hence it is best for developing an interactive web application with the latest web standards.

What is MVVM advantages and disadvantages? ›

MVVM facilitates easier parallel development of a UI and the building blocks that power it. MVVM abstracts the View and thus reduces the quantity of business logic (or glue) required in the code behind it. The ViewModel can be easier to unit test than in the case of event-driven code.

What are the issues with MVVM? ›

Disadvantages of MVVM:

Communication between various MVVM components and data binding can be painful. Code reusability of views and view model is difficult. Managing view models and their state in nested views and complex UI's is difficult.

When should you not use MVVM? ›

Short Answer: Don't use MVVM if you are not using WPF/Silverlight/any technology I know with powerful automatic binding. Long Answer: No other pattern facilitates unit testing better than MVVM in WPF/Silverlight.

Videos

1. Implementing Data Binding and MVVM Basics In .NET MAUI (Collection View, Pull To Refresh)
(Programming With Pragnesh)
2. What is the MVVM pattern, What benefits does MVVM have?
(James Montemagno)
3. MVVM for Beginners: Model-View-ViewModel Architecture for Xamarin.Forms, .NET MAUI, WPF, UWP, & More
(James Montemagno)
4. Webinar - Xamarin, MAUI and the reactive MVVM between them
(JetBrains)
5. Learn .NET MAUI - Full Course for Beginners | Build cross-platform apps in C#
(James Montemagno)
6. From Code-Behind Code to MVVM with XAML and C#
(Gerald Versluis)

References

Top Articles
Latest Posts
Article information

Author: Velia Krajcik

Last Updated: 10/23/2023

Views: 5253

Rating: 4.3 / 5 (54 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Velia Krajcik

Birthday: 1996-07-27

Address: 520 Balistreri Mount, South Armand, OR 60528

Phone: +466880739437

Job: Future Retail Associate

Hobby: Polo, Scouting, Worldbuilding, Cosplaying, Photography, Rowing, Nordic skating

Introduction: My name is Velia Krajcik, I am a handsome, clean, lucky, gleaming, magnificent, proud, glorious person who loves writing and wants to share my knowledge and understanding with you.