![Page 1: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/1.jpg)
QuickInfo „Quino“
![Page 2: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/2.jpg)
Quino wird ausgesprochen als kē-′nō
Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net
Einfache Unterstützung von .Net- und Dritthersteller-Komponentensammlungen
Modulares System dessen einzelne Subsysteme auch eigenständig verwendet werden können
Einleitung
![Page 3: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/3.jpg)
In Entwicklung (Version 0.3)
Anhand der aktuellen Kundenprojekte
weiterentwickelt
Ausgelegt für Munjari
Implementationsstand
Status
![Page 4: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/4.jpg)
Modellierung per C# Sourcecode
Automatische Schemaprüfung und –migration
Persistenz (aufgesetzt auf ADO.Net)
– Postgres: productive
– MSSQL: experimental
GUI-Helpers und -Controls für WinForms und
ASP.Net
Eigene Expression-Sprache
Implementationsstand
Umfang / Features
![Page 5: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/5.jpg)
Arbeitsweise
Modellieren
Schema migrieren
Code Generieren
UI und Logik implementieren
Ausführen / Testen
![Page 6: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/6.jpg)
Das Modell wird zur Laufzeit durch MetaModelGenerator-Ableitungen im Speicher generiert / gebaut.
Das Modell
Modularisierung
public class CoreModelGenerator : MetaModelGenerator
{
public static void AddToModel(IMetaModel baseModel)
{
...
IMainModuleAspect mainModule =
baseModel.Aspects.FindFirst<IMainModuleAspect>();
MetaBuilder builder = new MetaBuilder(baseModel);
IModuleAspect module = new ModuleAspect(mainModule, "Core");
...
}
}
![Page 7: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/7.jpg)
Das Modell
Klassen und Klassenvererbung
// Person
IMetaClass person = builder.AddClassWithDefaultPrimaryKey(
"Person",
...)
);
// Teacher
IMetaClass teacher = builder.AddWrapperClass(
person,
"Teacher",
new Guid("B406D15A-611B-11DC-BA95-754F56D89593")
);
// Student
IMetaClass student = builder.AddWrapperClass(
person,
"Student",
...
);
![Page 8: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/8.jpg)
Das Modell
Klasseneigenschaften und Felder
// Person
person.Caption = "Dozent/Lernender";
person.PluralCaption = "Dozenten und Lernende";
prop = builder.AddProperty(
person,
"Name",
MetaType.Text,
...
);
prop.Caption = "Nachname";
prop.MaximumSize = MaximumNameSize;
builder.AddSort(person, "Name");
builder.AddSort(person, "FirstName");
![Page 9: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/9.jpg)
Methoden können im Modell erfasst werden.
Methoden werden von einigen UI-Controls autom. als Buttons gerendert.
Schichtentrennung wird unterstützt
Das Modell
Methoden
IMetaMethod method = builder.AddMethod(
classClass,
"GenerateGroups",
"Gruppen erstellen"
);
method.Action = delegate(object sender, IMetaMethod method)
{
DoSomethingNiceInHere(sender);
};
![Page 10: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/10.jpg)
Aspekte sind kleine, typisierte „Konfigurations-Rucksäcke“ welche den Modell-Elementen wie Klassen und Properties angehängt werden können.
Das Modell
Aspekte
IMetaProperty prop = ... ;
IViewPropertyAspect propAspect = new ViewPropertyAspect();
propAspect.IsVisible = false;
prop.Aspects.Add(propAspect);
IViewClassAspect personAspect = new ViewClassAspect();
personAspect.Icon = personIcon;
person.Aspects.Add(classAspect);
builder.AddSort(person, "Name");
builder.AddSort(person, "FirstName");
![Page 11: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/11.jpg)
Pfade definieren Datenbeziehungen
Pfade sind bi-direktional
Aus Pfaden werden optional uni-direktionale Relationen gebaut
– Pfad: Buchung Konto
– Relation: Buchung.SollKonto, Buchung.HabenKonto
Pfade werden nie angezeigt, Relationen aber schon
Das Modell
Pfade
builder.AddOneToManyPath(
"Person_Contact",
person, "Id",
contact, "PersonId",
...
);
![Page 12: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/12.jpg)
Relationen können Aspekte haben, welche die Darstellung der Relation im UI beeinflussen
Das Modell
Relationen
IMetaProperty prop = builder.AddRelation(
person,
"Contact",
"Kontaktinformationen",
"Person_Contact"
);
builder.AddRelationAspect(prop, ViewRelationDisplayType.ScrollableDetails);
builder.AddRelationGroupAspect(prop);
![Page 13: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/13.jpg)
Item- und Listklassen mittels Generics
Generische Queries
Queries
IQuery query = new Query(Student.Metadata);
query.WhereEquals(Student.Fields.Id, studentId);
IDataItem<Student> studentItem = connection.GetItem<Student>(query);
studentItem.Load();
if (studentItem.Stored)
{
Console.WriteLine(studentItem.Object.Firstname);
}
![Page 14: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/14.jpg)
Support für Zeitachse im Framework
Typisiertes Resultset mit n Datensätzen
Queries
Abfrage für n Datensätze mit Zeitachse
IQuery query = new Query(StudentGroup.Metadata);
query.WhereEquals(StudentGroup.Fields.GroupId, groupId);
query.CustomData.Add(new TimelineOptions(TimelineOperator.Equal, date));
IDataList<StudentGroup> studentsInGroup =
connection.GetList<StudentGroup>(query);
studentsInGroup.LoadObjectsInQuery();
foreach (StudentGroup studentGroup in studentsInGroup)
{
...
}
![Page 15: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/15.jpg)
Mehrere OrderBy() für Sortierung
Verschachtelte Join‘s mit Where-Statement
Unterstützung von Distinct
Queries
Komplexe Abfrage mit Join
IQuery query = new Query(Absence.Metadata);
query.WhereEquals(Absence.Fields.OnHold, false);
query.OrderBy(Absence.Fields.ToDate, SortDirection.Ascending);
query.OrderBy(Absence.Fields.FromDate, SortDirection.Ascending);
query.Distinct = true;
query.Join(Absence.Relations.Student, QueryJoinCondition.All).
Join(Student.Relations.Classes, QueryJoinCondition.All).
Join(StudentClass.Relations.Class, QueryJoinCondition.All).
Join(Class.Relations.Teachers, QueryJoinCondition.All).
WhereEquals(ClassTeacher.Fields.TeacherId, teacher.Id);
IDataList<Absence> openAbsencesList = connection.GetList<Absence>(query);
openAbsencesList.LoadObjectsInQuery();
![Page 16: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/16.jpg)
Typisierte Inserts
Bulk-Inserts möglich mittels IDataList<T>
Insert
Einfacher Insert eines Datensatzes
IDataItem<LogEntry> newLogEntry = connection.GetItem<LogEntry>();
newLogEntry.Create();
newLogEntry.Object.AbsenceId = absence.Id;
newLogEntry.Object.AuthorId = author.Id;
newLogEntry.Object.KindEnum = kind;
newLogEntry.Object.DateTime = time;
newLogEntry.Object.Description = description;
newLogEntry.Save();
![Page 17: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/17.jpg)
Typisierte Updates
Bulk-Updates möglich mittels IDataList<T>
Update
Einfacher Update eines Datensatzes
IQuery query = new Query(Absence.Metadata);
query.WhereEquals(Absence.Fields.Id, absenceId);
IDataItem<Absence> absence = connection.GetItem<Absence>(query);
absence.Load();
if (absence.Stored)
{
absence.Object.OnHold = isOnHold;
absence.Object.LastTransition = DateTime.Now;
absence.Save();
...
![Page 18: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/18.jpg)
Wechsel auf .Net 3.5 (asap)
Evtl. Support für DLinq und Entity-Framework
Integration der Quino-Tools in Visual Studio 2008
Weitere GUI-Helper und –Controls für WinForms und
Web
Support für Reporting
Modell als Textformat (ohne Sourcecode)
Munjari
Zukunft
Geplant
![Page 19: QuikIno „Quino - Encodo Systems AG...Quino wird ausgesprochen als kē-′nō Quino ermöglicht modellgesteuerte Softwareentwicklung mit .Net Einfache Unterstützung von .Net- und](https://reader030.vdocuments.pub/reader030/viewer/2022040606/5eb42291df2461463e7ada82/html5/thumbnails/19.jpg)
Vielen Dank für die Aufmerksamkeit. Fragen?
Ende