Skip to content

Instantly share code, notes, and snippets.

View TorstenC's full-sized avatar

Torsten C. TorstenC

View GitHub Profile
@TorstenC
TorstenC / WPF-Blazor-App.md
Last active May 1, 2024 22:53
Shared Code für WPF-Anwendung und Blazor-Anwendung

Shared Code für WPF-Anwendung und Blazor-Anwendung

Da Blazor und WPF unterschiedliche Technologien mit eigenen Best Practices sind, müssen einige architektonische Überlegungen zu beachen, um eine maximale Wiederverwendung zu ermöglichen. Während direkte Wiederverwendung von View und ViewModel zwischen WPF und Blazor oft nicht praktikabel ist, kannst du das Design, die Architektur und vor allem das Model sowie Dienste oft wiederverwenden. Durch kluge Abstraktion und das Trennen von UI-spezifischer Logik und Geschäftslogik kannst du die Wiederverwendbarkeit maximieren und gleichzeitig die Plattform-spezifischen Stärken von WPF und Blazor nutzen.

Grundsätzliches

Strukturelle Überlegungen

  1. Model (M): Das Model, welches die Geschäftslogik und Datenzugriffsschicht beinhaltet, sollte idealerweise so gestaltet sein, dass es technologieunabhängig ist. Das bedeutet, dass es weder spezifische Abhängigkeiten von WPF noch von Blazor hat. Dies erleichtert die Wiederverwendung des Models sowohl in WPF als
@TorstenC
TorstenC / MVVM.md
Created May 1, 2024 19:01
🇩🇪 Model-View-ViewModel Architektur

Model-View-ViewModel Architektur

Das "Model" im MVVM-Schema enthält die Daten und die Logik, die direkt mit diesen Daten verbunden ist.
Das "ViewModel" transformiert diese Daten in eine Form, die für die Darstellung auf der Benutzeroberfläche geeignet ist und verwaltet die Interaktion zwischen der UI und den Modellen. Es verbindet die UI-Anforderungen (wie sie im View geäußert werden) mit den Datenoperationen, die im Model definiert sind.

  1. Model: Das erste M in MVVM repräsentiert das "Model". In dieser Rolle fungiert es als die Repräsentation der Datenstruktur, zusammen mit der Geschäftslogik, die Daten manipuliert. Das Modell ist verantwortlich für:
    • Den Zugriff auf die Datenquelle (z.B. Datenbank, Webdienste).
    • Die Implementierung der Geschäftsregeln oder Logik, die spezifisch für die Daten oder die Domäne sind.
    • Die Aufrechterhaltung des Zustands der Daten (aber nicht des Zustands der UI).
  • Benachrichtigungen über Änderungen in seinen Daten durch Implementierungen wie INotifyP
@TorstenC
TorstenC / Processor.ExecuteWaitExit.cs
Last active March 23, 2023 21:14
This class externalizes boiler plate code to run an external process with catching StandardOutput and StandardError.
/// <summary> This class externalizes boiler plate code to run an external process
/// with catching StandardOutput and StandardError. </summary>
public class Processor
{
public ProcessStartInfo StartInfo { get; set; }
public Exception? Exception { get; set; }
public Processor(string pathToExe, params string[] arguments) : this()
{
StartInfo.FileName = pathToExe;
if (1 == arguments.Length) StartInfo.Arguments = arguments[0];
@TorstenC
TorstenC / DirectoryTraverser.cs
Created March 18, 2023 13:24
Traverses a directoty tree with muptiple threads
var checkPath = new DirectoryInfo(startPath);
//HACK Paths should be an IEnummerable
var f = new FoundDir(checkPath.FullName, FoundDir.RootDir, 0);
ConcurrentQueue<FoundDir> directories = new();
directories.Enqueue(f);
Task[] parallelTasks = { Task.Run(() => DirScan(3)), Task.Run(() => DirScan(2)), Task.Run(() => DirScan(1)) };
Task.WhenAll(parallelTasks).Wait();
async Task DirScan(long instance)
{
while (instance > directories.Count)
@TorstenC
TorstenC / ToC-_-Adjusted-to-my-finger-lengths.kbd.json
Last active August 8, 2021 17:18
ToC / Adjusted to my finger lengths
[
{
"name": "ToC / Adjusted to my finger lengths",
"author": "ToC",
"switchMount": "cherry",
"pcb": true,
"plate": true
},
[
{
@TorstenC
TorstenC / RecoverableExceptions.cs
Last active June 12, 2021 00:03
Recoverable exceptions in C# like in Rust lang
//File Program.cs
using System;
using static TiMaModelV1.ErrorHandling.LotteryTicketValidator;
namespace TiMaModelV1
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
@TorstenC
TorstenC / ymdk_wings_toc.json
Created May 17, 2021 20:54
My YMDK Wings Layout
{
"version": 1,
"notes": "ToC QMK setting. Open this file with the QMK Configurator import QMK Keymap feature.",
"documentation": "\"This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
"keyboard": "ymdk/wings",
"keymap": "ymdk_wings_toc",
"layout": "LAYOUT_all",
"layers": [
[
"KC_NO",
{
"name": "7 + 7 split v02",
"author": "ToC",
"notes": "https://cdn.discordapp.com/attachments/833450036825948203/833450708917289024/7--7-split-v02.png"
},
[
{
"x": 3.5,
"t": "#000000\n\n#0000FF",
"f": 4,
@TorstenC
TorstenC / HashTestTemp.cs
Created July 20, 2018 18:30
Test of speed of .NET HashAlgorithms
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.IO;
using System.Security.Cryptography;
using System.Diagnostics;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace ConceptTest {
[TestClass]
@TorstenC
TorstenC / stackoverflow_q43421070.cs
Created April 16, 2017 09:08
What does “Zoll” from IntelliSense mean?
namespace stackoverflow.q43421070 {
class stackoverflow<T> {
T Result;
void ZollIsNotCustomsDuty() {
Result = // default(T);
}
}
}