Wenn Sie die wenigsten beweglichen Teile benötigen
Das einfachste Minum -Programm (siehe weitere Code -Beispiele unten):
public class Main {
public static void main ( String [] args ) {
var minum = FullSystem . initialize ();
var wf = minum . getWebFramework ();
wf . registerPath ( GET , "" ,
r -> Response . htmlOk ( "<p>Hi there world!</p>" ));
minum . block ();
}
}Dieses Web-Framework "Minum" bietet eine minimalistische Grundlage für eine Webanwendung. Für TDD, von TDD.
make test_coverage )make mutation_test )Das Minum ist fünftausend Codezeilen - die "minimalistischen" Konkurrenten liegen zwischen 400.000 und 700.000 Zeilen, wenn sie ihre Abhängigkeiten berücksichtigen. Ich habe kein ähnliches Projekt gefunden.
Die Anwendung eines minimalistischen Ansatzes ermöglicht ein einfacheres Debuggen, Wartbarkeit und niedrigere Gesamtkosten. Die meisten Frameworks handeln schnelleres Start-up mit höheren Gesamtkosten. Wenn Sie eine nachhaltige Qualität benötigen, muss die Software von Anfang an gut getroffen und dokumentiert sein. Beispielsweise wurde die Fähigkeit dieses Projekts, eine so hohe Testberichterstattung zu erreichen, durch das Minimalismus -Paradigma erheblich ermöglicht.
Es gibt einen schnellen Start oder wenn Sie etwas mehr Zeit haben, sollten Sie das Tutorial ausprobieren
< dependency >
< groupId >com.renomad</ groupId >
< artifactId >minum</ artifactId >
< version >8.0.5</ version >
</ dependency >Kompilierte Größe: 200 Kilobyte.
Produktionscode -Zeilen (einschließlich der erforderlichen Abhängigkeiten)
| Minum | Javalin | Federstiefel |
|---|---|---|
| 5,335 | 141.048 | 1.085.405 |
Siehe Details
Siehe Framework Performance -Vergleich
In den folgenden Links für Beispielprojekte finden Sie dieses Framework.
Kleinste Möglichkeit
Dieses Projekt ist wertvoll, um die minimal-Möglichkeit zu sehen, die gestellt werden kann. Dies könnte ein guter Ausgangspunkt für die Verwendung von Minum bei einem neuen Projekt sein.
Beispiel
Dies ist ein gutes Beispiel, um ein grundlegendes Projekt mit verschiedenen Funktionen zu sehen. Es zeigt viele der typischen Anwendungsfälle des Minum -Frameworks.
Memoria -Projekt
Dies ist ein Familienbaumprojekt. Es zeigt die Art von Annäherung, die dieser Rahmen fördern soll.
Instanziierung einer neuen Datenbank:
var db = new Db <>( foosDirectory , context , new Foo ());Hinzufügen eines neuen Objekts zu einer Datenbank:
var foo = new Foo ( 0L , 42 , "blue" );
db . write ( foo ); Aktualisieren eines Objekts in einer Datenbank:
foo . setColor ( "orange" );
db . write ( foo ); Löschen aus einer Datenbank:
db . delete ( foo ); Schreiben einer Protokollanweisung:
logger . logDebug (() -> "hello" );Analyse eines HTML -Dokuments:
List < HtmlParseNode > results = new HtmlParser (). parse ( "<p></p>" );Auf der Suche nach einem Element in der analysierten Grafik:
HtmlParseNode node ;
List < HtmlParseNode > results = node . search ( TagName . P , Map . of ());Erstellen eines neuen Webhandlers (eine Funktion, die eine HTTP -Anforderung übernimmt und eine Antwort zurückgibt):
public Response myHandler ( Request r ) {
return Response . htmlOk ( "<p>Hi world!</p>" );
}Registrieren Sie diesen Endpunkt:
webFramework . registerPath ( GET , "formentry" , sd :: formEntry );Erstellen und Rendern einer Vorlage:
TemplateProcessor foo = TemplateProcessor . buildProcessor ( "hello {{ name }}" );
String rendered = foo . renderTemplate ( Map . of ( "name" , "world" ));Erhalten Sie einen Abfrageparameter aus einer Anfrage:
String id = r . requestLine (). queryString (). get ( "id" );Erhalten Sie einen Körperparameter von einer Anfrage als Zeichenfolge:
String personId = request . body (). asString ( "person_id" );Holen Sie sich einen Pfadparameter von einer Anforderung als Zeichenfolge:
Pattern requestRegex = Pattern . compile ( ".well-known/acme-challenge/(?<challengeValue>.*$)" );
final var challengeMatcher = requestRegex . matcher ( request . requestLine (). getPathDetails (). isolatedPath ());
// When the find command is run, it changes state so we can search by matching group
if (! challengeMatcher . find ()) {
return new Response ( StatusLine . StatusCode . CODE_400_BAD_REQUEST );
}
String tokenFileName = challengeMatcher . group ( "challengeValue" );Erhalten Sie einen Körperparameter aus einer Anfrage als Byte -Array:
byte [] photoBytes = body . asBytes ( "image_uploads" );Überprüfen Sie während der Tests nach einer Protokollnachricht:
assertTrue ( logger . doesMessageExist ( "Bad path requested at readFile: ../testingreadfile.txt" ));