Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von ModelViewPresenter
Thema: UML, Pflichtenheft, Feinspezifikationen vs. agile Methoden
Am im Forum: Smalltalk

Letztlich kommst du dann aber immer auch mehr oder weniger in den Zwang, gewisse Rollen mit gewissen Verantwortlichkeiten zu definieren - wie eben Architekt. In kleinen Teams kann das einzelner Entwickler oder mehere gleichberechtigt machen. Wenn ich aber eine Architektur und Architekturentscheidungen aufstelle für ein Team mit 160 Leuten, kann das mit gleichberechtigt und eigenverantwortlich gemacht werden. Das ist chaotisch.

Letztlich sind wir dann mit einem von dir beschriebenen Mix-Modell gefahren. Keiner hat das Scrum genannt und auch der Hardcore Agilist hat sich mit Händen und Füßen geweigert, das Scrum zu nennen und wollte damit auch nichts mehr zu tun haben.

Aus meiner Sicht ist das auch kein Scrum, sondern der Werkzeugkoffer. Ich nehme einige Rollen, Methoden und Strukturen und versuche in mein bestehendes Organisitionsmodell zu integrieren bzw. passe ich die bestehende Struktur auch an.

Echtes Lehrbuch Scrum kenne ich nur aus Kleinst- und Kleinprojekten.

Thema: UML, Pflichtenheft, Feinspezifikationen vs. agile Methoden
Am im Forum: Smalltalk

Ich hatte ein anderes Projekt mit 160 Entwicklern und einem Hardcore Agilisten, der das auch nach Scrum Lehrbuch aufziehen wollte. Aber das fängt dann schon mit sehr banalen Fragen an: wie organisier ich ein Daily Stand up? Mit 160 Personen? Spalte ich das in Teams auf? Wer trägt die Informationen aus den Einzelteams weiter und kommuniziert diese? Wer ist Scrum Master? Brauche ich mehrere? Dann brauche ich wieder einen "Super" Scrum Master. Ab dem Punkt bin ich schon wieder bei Hierarchien. Wer steuert die Teams etc. Ab dem Punkt ist man von Lehrbuch Scrum schon wieder weg...

Thema: UML, Pflichtenheft, Feinspezifikationen vs. agile Methoden
Am im Forum: Smalltalk

Ich bin da eigentlich auch eher pragmatisch unterwegs. Für mich sind alle Methoden eher Werkzeugkoffer, aus denen man sich bedienen kann und im konkreten Projekt anwendet. Es hängt aber auch sehr stark von den Teams ab. Agil heißt ja auch, dass der einzelne Entwickler "enriched" wird und mehr Eigenverantwortung trägt. Viele wollen das gar nicht und einfach nur ihre Spezifikation runterklimpern. Solche Leute frustriert man mit agilenen Vorgehen eher.

Ich bin bisher immer in Großprojekten im mehrstelligen Millionenbreich unterwegs gewesen. Aktuell arbeite ich als Fachlicher und Technischer Spezifikateur mit ca. 200 Entwicklern, zig Architekten, Designern und was es sonst noch gibt. Das Ganze läuft auch noch Near/Offshore. Ein 100% agiles Vorgehen funktioniert da nicht. Klar, Dinge wie kurze Sprints, enge Zusammenarbeit von Fachbereichen, Desginern, Architekten und Entickwlern, Reviews, Restrospektiven, Stand Ups etc. kommen auch bei uns vor; ist aber kein agiles Vorgehen im eigentlichen Sinne, sondern ein Anwenden bestimmter Praktiken.

Vor allem auf der Planungs- und Steuerungsebene brauche ich andere Methoden bei so einer Projektgröße. Wenn ich meine Issues grob mit Story Points bewerte etc., kann ich kein vernünftiges Reporting oder Budgetplanung machen.

Zum Thema UML: Nutzen wir auch. Man muss da aber imho wissen, wo man den Cut macht. Von tiefgehenden Sequenzdiagrammen, Klassenmodellen halte ich auch eher wenig. Hilfreicher sind Dinge wie Use Cases, Komponentendiagramme, Schnittstellen usw. Letztlich brauche ich sowas auch bei der Projektgröße - einfach, um alles zusammenhalten. Jedes Team würde sonst seine eigene Suppe kochen.

Ich habe auch in solchen Kontexten schon Hardcore Agilisten erlebt. Es gab im aktuellen Projekt ein Entwicklungsteam samit Teamleiter dass sich komplett losgelöst haben: keine Dokumentation mehr, Code First, keine Schätzungen, ihre eigenen Programmier/Architekteurregeln aufgestellt, sich vom Rest des Projekts entkoppelt, ihre Komponente in eigenen Sprints geliefert, nur noch User Stories definiert und mit Story Points bewertet. Auch haben sie an den Spezifikateuren vorbei direkt mit den Fachbereichen gesprochen etc. Führte letztlich zu nem riesen Overhead, der Code war Murks, es konnte keine Schätzungen, Kapazitäts-/Budgetplaungen mehr an die Projektleitung reported werden. Ebenso gab es kein vernüntiges Monitoring mehr.

Thema: Checkliste / Anleitung um Benutzerwünsche zu eruieren
Am im Forum: Smalltalk

Mir hat Folgendes Buch bei einem Projekt sehr geholfen:

Requirements-Engineering und -Management: Professionelle, iterative Anforderungsanalyse für die Praxis [Gebundene Ausgabe]

Es gibt dort viele Beispiele und Checklisten. Außerdem ist das Buch aus praktischer Sicht geschrieben und keine theoretische Abhandlung.

Thema: .NET Entwickler: Gehalt/Gehaltsvorstellung
Am im Forum: Smalltalk

Die Branche macht wohl den größten Faktor aus. In der Autoindustrie verdient man z.B. relativ gut, während man in der kleinen Klitsche eher schlechter abschneidet. Dann kommen natürlich auch noch Faktoren wie Reisezeit etc. dazu. Ich selbst arbeite bei einer IT-Beratung, d.h., ich fliege immer quer durch Deutschland, um beim Kunden vor Ort, die Software zurecht zu schustern. Diese Belastung muss natürlich entsprechend berücksichtigt werden. Denke aber, dass man nach 10 Jahren locker 60-70k verlangen kann je nach Branche.

Thema: Heutige Jugend zu "faul" zum lernen?
Am im Forum: Smalltalk

Es liegt aber auch daran, was in Schule und Studium verlangt wird. Meine Lehrer redeten immer davon: "...dass man nur wissen müsste, wo etwas steht...", anstatt einfach Fakten und Grundlagen schlicht zu beherrschen. Die Schüler (und zunehmend auch Studenten) werden darauf trainiert, sich Wissen möglichst schnell und effizient zu besorgen. Das Einfachste ist natürlich sich Antworten auf Fragen, direkt zu einzuholen als ein Buch Joseph Albahari durchzuwälzen.
Ich finde das z.T. problematisch, weil ich ein Schüler war, der selbst solche Lehrer hatte. M.E.n. gibt es in jedem Bereich ein gewisses Set an Wissen, dass man einfach (auswendig) kennen muss und sich dieses auch erstmal mühsam selbst erarbeiten sollte, anstatt jede Wissenslücke durch Internetrecherche aufwendig zu schließen. Klar, ist es wichtig, in unserem Job, wo Wissen eine kurze Halbwertszeit, schnell Informationen und Wissen über gewisse Dinge einzuholen, dennoch kann man nicht auf Basis- und Faktenwissen gänzlich verzichten. Ich hoffe, dass sich da ein gewisses Umdenken einstellt.

Thema: Sortieren von Listen anhand mehrerer Kriterien *über mehrere Objekte*
Am im Forum: Rund um die Programmierung

Zitat
Aber wie dem auch sei, ich denke nach den bisherigen Hinweisen, solltest du es jetzt selber lösen können.

Ja, sollte ich. Meine Lösung sieht wie folgt aus:

Ich lege einen Zwischenspeicher an, der nach Jahreszahl und Int-Wert gruppiert ist. Im Comparer sortiere ich zunächst nach Jahreszahl. Danach wird geschaut, ob es für einen der beiden Foos einen Eintrag im Zwischenspeicher gibt, ist dies so, wird der, für den es zutrifft nach hinten bzw. der für den es nicht zutrifft nach vorn gesetzt. In allen weiteren Fällen wird nach Int-Wert und dann nach Boolean sortiert.

Aus:
2015, 2, true
2001, 1, true
2002, 1, true
2002, 2, true
2003, 2, true
2013, 3, true
2001, 2, true
2015, 1, true
2013, 2, true
2002, 2, true
2013, 3, true
2013, 2, false
2014, 3, false
2013, 7, true
2013, 4, false
2013, 4, true
2013, 4, true
2015, 1, false

wird dadurch:
2001, 1, true
2001, 2, true
2002, 1, true
2002, 2, true
2002, 2, true
2003, 2, true
2013, 3, true
2013, 3, true
2013, 7, true
2013, 2, true
2013, 2, false
2013, 4, true
2013, 4, true
2013, 4, false
2014, 3, false
2015, 2, true
2015, 1, true
2015, 1, false

Danke für die Tipps!

Thema: Sortieren von Listen anhand mehrerer Kriterien *über mehrere Objekte*
Am im Forum: Rund um die Programmierung

Um Missverständnisse zu vermeiden, das Ergebnis, das ich haben möchte, sieht so aus:

2001, 1, true
2001, 2, true
2002, 1, true
2002, 2, true
2002, 2, true
2003, 2, true
2013, 3, true
2013, 3, true
2013, 2, true
2013, 2, false
2014, 3, true


Die "2er" in der Kategorie "2013" kommen ans Ende, weil es einen gibt, der einen "falser" hat.

Thema: Sortieren von Listen anhand mehrerer Kriterien *über mehrere Objekte*
Am im Forum: Rund um die Programmierung

Genau, in diesem einfachen Beispiel funktioniert es tatsächlich. Verwendet man folgende Werte Daten:

		foos.Add(new Foo(2001, 1, true));
		foos.Add(new Foo(2002, 1, true));
		foos.Add(new Foo(2002, 2, true));
		foos.Add(new Foo(2003, 2, true));
		foos.Add(new Foo(2013, 2, false));
		foos.Add(new Foo(2013, 3, true));
		foos.Add(new Foo(2001, 2, true));
		foos.Add(new Foo(2013, 2, true));
		foos.Add(new Foo(2002, 2, true));
		foos.Add(new Foo(2013, 3, true));
		foos.Add(new Foo(2014, 3, true));

sieht die Welt leider anders aus.
Zitat
m.E. kommst du nicht drum herum, vorher deine spezielle Gruppierung zu ermitteln und die Objekte entsprechend zu taggen, damit du im Comparer weißt, dass diese Objekte als größer angesehen werden sollen als nicht solchermaßen gruppierte/getaggte.

Sowas in der Art habe ich befürchtet. Nun muss man schauen, wie man das am elegantesten umsetzen kann...

Thema: Sortieren von Listen anhand mehrerer Kriterien *über mehrere Objekte*
Am im Forum: Rund um die Programmierung

Zitat von Abt
Gewusst wie: Verwenden Sie die IComparable und IComparer-Schnittstellen in Visual C#
Musst halt auf Gleichheit prüfen und wenn dies eintrifft das untergeordnete Kriterium prüfen.
Ich würds aber mit Linq machen, weils einfacher zu warten und mit weniger Code umsetzbar ist.

Das ist ja genau das, was ich nicht wollte.
Zitat
Was ich möchte ist, nach allen dieser drei Attribute zu sortieren (Datum aufsteigend, Zahl aufsteigend, true vor false). Dabei sollen allerdings, diejenigen Objekte mit dem gleichen Boolean und Zahl zusammen betrachtet werden. Mit einem normalen Comparer könnte ich natürlich zunächst über Datum, dann Zahl, dann Boolean sortieren. Dabei käme Folgendes heraus:

O2{2013, 2 , true}
O1{2013, 2 , false}
O3{2013, 3 , true}

Das eigentliche Problem ist, dass ich eine Gruppe von Objekten habe und diese mit dem Comparer nicht als solche betrachtet werden kann.

Er sortiert in dem Fall nach Datum. Das untergeordnete Kriterium wäre die Zahl und dann wiederum das untergeordnete Kriterium der Boolean.


PS: Ich hole die Daten nicht aus einer SQL-Datenbank. Es handelt sich um ganz normale Listen (IList<T>).

Thema: Sortieren von Listen anhand mehrerer Kriterien *über mehrere Objekte*
Am im Forum: Rund um die Programmierung

Hallo,

nehmen wir an, ich hätte Objekte, die ein Datum, eine Zahl und boolean enthalten. Davon existieren drei in einer Liste:

O1{2013, 2 , false}
O2{2013, 2 , true}
O3{2013, 3 , true}

Was ich möchte ist, nach allen dieser drei Attribute zu sortieren (Datum aufsteigend, Zahl aufsteigend, true vor false). Dabei sollen allerdings, diejenigen Objekte mit dem gleichen Boolean und Zahl zusammen betrachtet werden. Mit einem normalen Comparer könnte ich natürlich zunächst über Datum, dann Zahl, dann Boolean sortieren. Dabei käme Folgendes heraus:

O2{2013, 2 , true}
O1{2013, 2 , false}
O3{2013, 3 , true}

Das möchte ich nicht. Problem ist, dass der Comparer mit seinem Mergesort nur 2 Objekte miteinander vergleicht. Ich möchte, aber, dass, wenn in Objekten mit gleicher Zahl eines der Objekte den false Wert hat, diese ans Ende kommen. Und zwar so:

O3{2013, 3 , true}
O2{2013, 2 , true}
O1{2013, 2 , false}

Meine Frage: Gibt es einfache Möglichkeit soetwas zu implementieren? Vielleicht sogar doch mit einem einfachen Comparer?

Vielen Dank
MVP

Thema: Wie geht Ihr bei Zeitmessungen vor...
Am im Forum: Smalltalk

Das kommt auf die Situation an. Wenn ich eine nur mal grob sehen will, wie das Zeitverhalten einer implementierten Komponente ist, schau ich auch mal auf die Windows Uhr.
Muss ich aber Fehlertickets im Bereich Perfomance analysieren/beheben oder Aussagen "nach oben" an den Technischen Chefdesigner, NFA-Architekten oder Projektleiter weitergeben, dann setze ich auch einen Profiler wie JProfiler (gibt wahrscheinlich Pendants für .NET) ein. Muss ich Aussagen zur Performance des Gesamtsystems abgeben, dann kommen schon eher Tools wie Silk Performer und co. zum Einsatz.

Thema: Mock- und Fake-Objekte: Macht ihr in eurem persönlichen Sprachgebrauch einen Unterschied dazwischen?
Am im Forum: Smalltalk

Den Begriff Fake benutze ich nie. Die Unterscheidung zwischen Stub und Mock war mir bekannt und ich verwende die beiden Begriffe auch in der Praxis, da das durchaus sinnvoll ist. (Schließlich tun beide ganz verschiedene Dinge) Die meisten Mocking-Frameworks unterscheiden da aber imho nicht - da ist alles ein Mock.

Thema: Projektfremde Aktivitäten während der Arbeitszeit erlaubt?
Am im Forum: Smalltalk

Was sagt der Guru dazu?

„Es gehört auch nicht in den Verantwortungsbereich Ihres Arbeitgebers, Ihnen Zeit zum Lernen zu geben. Manche Firmen stellen Sie für solche Weiterbildungszeiten frei. […] Aber noch einmal: Man tut Ihnen damit einen Gefallen, und Sie sollten deswegen angemessen dankbar dafür sein.“

Und ferner:

„Sie schulden Ihrem Arbeitgeber Zeit und Arbeitsaufwand in einem Bestimmten Umfang. Für das Beispiel hier gehen wir einmal vom US-Standard von 40 wöchentlichen Arbeitsstunden aus. Diese 40 Stunden sollten Sie mit den Problemen Ihres Arbeitgebers verbringen und nicht mit Ihren eigenen.

Sie sollten einplanen, 60 Stunden die Woche zu arbeiten. Die ersten 40 gehören Ihrem Arbeitgeber. Die restlichen 20 gehören Ihnen. Während dieser 20 Stunden sollten Sie lesen, üben, lernen und Ihre Karriere anderweitig ausbauen.“

(Quelle: Uncle Bob)

Ich sehe das etwas anders. Ein Arbeitgeber hat aus meiner Sicht schon die Verantwortung, seine Mitarbeiter weiterzuentwickeln. Allein durch die Arbeit in Projekten - also Praxis - wird ein Software-Entwickler seine Fähigkeiten nicht nachhaltig ausbauen können. Deshalb sollten regelmäßige Schulungen auch im Interessere des Arbeitgeber angeboten werden.

Wie ist es bei mir?

In meiner Firma ist es üblich, sich zwei mal im Jahr aus einem Katalog von Schulungen sich jeweils eine pro Schulungszeitraum herauszusuchen. Das sind häufig interene Schulungen von 1-2 Wochen. Neulich war ich auf einer JEE-Schulung, wo wir von Persistenz-Frameworks bis hin zu DI-Containern alles mögliche an Input bekamen und nebenbei ein kleines Projekt in Teams entwickeln sollten. Nur so hat man eigentlich die Chance, sich auch mal tiefer und auf einer breiteren Ebene in eine Thematik einzuarbeiten. Wenn ich dagegen für ein Projekt etwas Neues lernen muss, dann sind es meistens sehr spezielle und punktuelle Dinge, die benötigt werden. So fehlt leider oft der globalgalaktische Zusammenhang und man hat ein Thema nie in seiner theroetischen Tiefe mal wirklich aufsaugen können.

Im Internet surfen, in Foren lesen oder schreiben ist bei uns eigentlich kein Problem. Wenn ich recherchieren muss, dann recherchiere ich. Auch können wir uns über die Firma Bücher bestellen und während der Arbeit gerne auch lesen. Was allerdings nicht geht, sind die oben beschriebenenen Nebenprojekte. Und an der Stelle kann ich wieder Uncle Bob anschließen: während der Arbeit hat man sich mit den Problemen seines Arbeitgebers zu beschäftigen.

Thema: Was tut ihr, um professionell zu sein?
Am im Forum: Smalltalk

Mit Übung war hier tatsächlich etwas anderes gemeint. Die persönliche Weiterbildung gehört aus Sicht von Martin auch zu Dingen, die ein Profi tun sollte. Dazu gehören im Wesentlichen die Dinge, die ihr schon genannt habt: Bücher lesen, aktiv an Communities beteiligen, in Open Source Projekten engangieren, privat mit anderen Sprachen/Technologien befassen. Er geht sogar soweit und behauptet, dass ein Arbeitgeber auf keinen Fall dazu verpflichtet sei, seine Mitarbeiter weiterzubilden. Dies sei Sache des Angestellten selbst. (sehe ich etwas anders)

Was hier mit Training gemeint war, waren ganz banale Dinge. Bevor bspw. ein Musiker anfängt zu spielen/proben, geht er i.d.R. einige Fingerübungen durch, spielt ein paar Pentatoniken und geht Tonleitern durch. So soll es nach Martin auch ein Programmierer tun. D.h., zum Beispiel vor der Arbeit ne Stunde hinsetzen und einige Algorithmen implementieren (deren Lösung man kennt), um sich zu fokussieren. Dabei geht es einfach darum, die Handbewegungen, das Tippen, das Klicken bestimmter Buttons in der IDE etc. zu verinnerlichen, sie immer wieder ins Gedächtnis bringen.

Thema: Was tut ihr, um professionell zu sein?
Am im Forum: Smalltalk

Ich habe neulich das Buch von „Uncle Bob“ (Robert C. Martin) „Clean Coder: Verhaltensregeln für professionelle Programmierer“ gelesen, in dem Robert C. Martin einige Regeln, Haltungen usw. aufstellt, die dazu dienen, sollen ein professioneller Software-Entwicklungen zu werden/sein.
Ich möchte nicht alle Techniken, Methoden und Regeln diskutieren, sondern nur einige Punkte, die mir besonders aufgefallen sind. Des Weiteren interessiert mich als junger Entwickler, wie und welcher Haltung, Ansätzen usw. erfahrene Entwickler vorgehen.

Das Versuchen und arbeiten unter Druck
Einige kennen das wahrscheinlich, dass der Vorgesetzte, Kunde oder wer auch immer ankommt und sagt: „Wir bräuchten das ganz dringend und am besten sofort.“ Ich selbst habe dann schon einmal den aus Martins Sicht Kardinalfehler gemacht und gesagt „Ja, ich versuche das.“ Grund, warum das vermeiden sollte, sei, dass man sich verpflichtet, eine besondere Anstrengung aufzubringen und eine Energiereserve aufbringt, die man zurückgehalten hat. Außerdem zeigt man so, dass man seiner ursprünglichen Planung und Schätzung nicht genügend vertraut. Im Prinzip erweckt man auf der Gegenseite eine Erwartungshaltung, die man nicht erfüllen kann und behält sich einen Fehlschlag vor. Besser wäre von Anfang ein klares „Nein“.
Etwas, das in diesem Zusammenhang steht, ist Stress und Druck von außen. Auch hier bin ich selbst schon in die Falle getappt, in dem ich Verpflichtungen einging, die eigentlich nicht einzuhalten waren. Und dann kam die Hektik. Man versucht mit aller Gewalt quick and dirty irgendwas hinzuschustern. Gleichzeitig lässt man die Tests weg, weil sie ja „unnötig Zeit kosten“. So ein Verhalten ist natürlich unprofessionell. Wenn man nur in normalen Zeiten an Tests glaubt, aber in Stresssituation Chaos zulässt, dann glaubt man nicht wirklich an Unit Tests. Tatsächlich sollte man in Stresssituationen den Disziplinen, die man sonst verwendet und auch dem eigenen Fachwissen vertrauen.

Übung und Training
Das ist etwas, das mir neu war. Martin schreibt dort, dass ein Profi trainieren muss ebenso wie es Musiker, Sportler etc. tun. Programmierer sollten alleine oder in Gruppen mit anderen Programmiereren trainieren. Als Möglichkeiten nennt er dafür Coding Dojos, Programmier-Katas, Wazas oder Randoris. Ich habe davon nie etwas gehört und würde gern wissen, ob ihr euch in eurer Freizeit ein paar Stunden zum Üben gönnt und wieviel diese Übungen euch bringen.

Mentoring
Jeder sollte nach Martins Auffassung einen Lehrmeister haben, der ihn in der Handwerkskunst der Programmierung unterrichtet. In der Software-Entwicklung ist das noch eher unüblich. Ein Absolvent kommt in die Firma und wird oft ohne große Einweisung an die Kernentwicklung gesetzt. Absolventen sollten nach der Auffassung von Martin zunächst ein Jahr als „Lehrlinge“ arbeiten und die wesentlichen Disziplinen und Werte von den Gesellen erlernen. Gesellen sind in diesem Zusammenhang gute Entwickler mit im Schnitt etwa 5 Jahren Erfahrung. Sie werden von „Meistern“ beaufsichtigt. Das sind jene mit mehr als 10 Jahren Erfahrung, die schon einmal ein nennenswertes Projekt geleitet haben und auch in der Lage sind, Menschen zu führen.
Martin fordert auch von erfahren Kollegen ein, sich um die neuen aktiv zu kümmern, in dem sie Code Reviews durchführen oder mal im Pair programmieren usw. Ich habe sowas bisher in meiner Erfahrung nicht erlebt, dass sich jemand mal mit mir intensiv auseinandergesetzt hätte, um mir etwas beizubringen. Ich habe auch den Eindruck, dass es in der Software-Entwicklung etwas verpönt zu sein scheint, jemandem etwas zu lehren. Die meisten eignen sich ihre Skills heute noch immer selbst an.
Mich würde interessieren, wie das bei euch läuft. Habt ihr Mentoren, die euch unterstützen? Seid ihr selbst Mentor und wenn ja, wie geht ihr vor? Oder haltet ihr davon gar nichts.

Des Weiteren würde ich natürlich gern von euch wissen, was es für euch bedeutet, professionell zu sein, mit welcher Haltung/Ethik/ Disziplinen/Methoden ihr an die Entwicklung geht.

Thema: Instanzvariable in Form vs. Variable mitgeben [==> weder noch, sondern Events]
Am im Forum: GUI: Windows-Forms

Mit Application Controller meinte ich das Pattern von Martin Fowler. Das ist kein Controller im MVC-Sinne.

Zitat
Some applications contain a significant amount of logic about the screens to use at different points, which may involve invoking certain screens at certain times in an application. This is the wizard style of interaction, where the user is led through a series of screens in a certain order. In other cases we may see screens that are only brought in under certain conditions, or choices between different screens that depend on earlier input.

Vermutlich gibt es heute andere/modernere Ansätze für sowas. Ich gebe zu, dass mir diese nicht bekannt sind.

Thema: Instanzvariable in Form vs. Variable mitgeben [==> weder noch, sondern Events]
Am im Forum: GUI: Windows-Forms

Du würdest also für das Anzeigen der einen Form (Show) ein eigenes Event definieren?

Ich verstehe sowieso nicht, warum eine Form überhaupt eine andere aufrufen soll. Kann man sowas nicht besser mit einer Art "Application Controller" umsetzen?

Thema: Instanzvariable in Form vs. Variable mitgeben [==> weder noch, sondern Events]
Am im Forum: GUI: Windows-Forms

Hallo,

ich habe gerade einen Thread in einem anderem Forum gelesen (http://www.uni-protokolle.de/foren/viewt/294220,0.html)

Zusammengefasst geht es darum, dass eine Form auf eine andere zugreift.

private static FormMain _instance;
public static FormMain Instance {
get {
   if (_instance == null) {
      new FormMain();
   }
   return _instance;
}

Zugriff in einer anderen Form:

FormMain.Instance.Show( msg );


Demgegenüber steht nun, dass man der einen Form die Referenz auf die andere mitgibt, um darauf zugreifen zu können.

Die Argumente der User dort finde ich nicht ganz schlüssig und ich wollte mal wissen, was ihr dazu sagt. Was sind die Vor- und Nachteile?

Thema: Übermittelung generischer Bedingungen bei Verarbeitung von Datensätzen
Am im Forum: Rund um die Programmierung

Zitat
Entweder, wenn das erste Objekt geschrieben wird oder man designt das so

Dann müsste ich mir natürlich irgendwo merken, ob es das erste Mal ist. Naiv gedacht, würde ich dazu irgendwo ein Flag setzen, was ich erstmal als unschön empfinde.
Zitat
Man könnte auch ganz fancy eine Factory mit Fluent-Interfaces schreiben:

Kann ich - glaube ich - so mit Java-Bordmitteln erstmal nicht machen. Sicher könnte ich eine Factory schreiben, was sicher auch sinnvoll ist, da ich sehr viele Objekte bauen muss, welche z.T. per DI übertragen werden.

Übergebe nun vorerst dem Writer den Header, wobei der Writer dann beim Initialisieren den Header schreibt.

Thema: Übermittelung generischer Bedingungen bei Verarbeitung von Datensätzen
Am im Forum: Rund um die Programmierung

Danke, ich seh da ein Mapping. Was mich interessieren würde ist, wann und wie du Spalteüberschriften "Vorname" und "Nachname" konkret schreibst. Das ist ja was anderes als in eine Datenbank zu schreiben, weil dort Tabellen mit Überschriften schon vorhanden sind und ich diese nicht selbst anlege.

Thema: Übermittelung generischer Bedingungen bei Verarbeitung von Datensätzen
Am im Forum: Rund um die Programmierung

Alle sollen den gleichen Header haben. Dieser wird vorgegeben von der Datei, aus der gesplittet wird.

Beispiel:

Personen.csv
Name, Status (=> Header)
Werner, 5
Meyer, 5
Schwarz, 6

Als Ergebnis würde ich dann, wenn ich nach Status prüfe Folgendes haben wollen:

Personen_mit_Status5.csv
Name, Status (=> Header)
Werner, 5
Meyer, 5

Personen_mit_Status6.csv
Name, Status (=> Header)
Schwarz, 6

In diesem Falle hätte ich zwei Aktionen: die eine, die in "Personen_mit_Status5.csv" schreibt und die andere in "Personen_mit_Status6.csv". Dabei können die Daten in Feldern jeweils unterschiedlich nachbereitet werden. (Erstmal nebensächlich) Ich habe somit zwei unterschiedliche Outputstreams, die zwar für sich unterschiedliche Datensätze schreiben, aber am Anfang den gleichen Header schreiben sollten.

Thema: Übermittelung generischer Bedingungen bei Verarbeitung von Datensätzen
Am im Forum: Rund um die Programmierung

Ich möchte das Thema noch einmal kurz aufleben lassen. Wie eingangs sagte, möchte ich je nach Bedingung eine andere Aktion ausführen, die einem Fall darin besteht, die gelesen Zeile in eigene separate CSV-Datei abzulegen. Ich möchte allerdings auch den Head schreiber. Beim Header handelt es sich allerdings um einen Spezialfall, da dieser nicht unbedingt validiert werden muss.

Ich sehe da zwei Möglichkeiten:

1. Um konsequent zu bleiben, lege ich den Header in die Queue. Natürlich würde beim Nehmen aus der Queue dieser Header von allen Prädikaten abgeprüft. Demnach müsste ich eine eigenes Prädikat samt Aktion für den Header vorhalten. Dann stellt sich die Frage, wie mache ich in einem String[]-Objekt sauber kenntlich, dass es ein Header ist.

2. Im Konstruktor des Schreiber-Ojektes (in jede CSV-Datei braucht ein eigenes) führe ich eine Methode aus, die den Konstruktor schreibt. Damit entziehe ich das Header-Schreiben dem Validierungsprozess. Der Nachteil wäre, dass ich dem Schreiber-Objekt von außen mitteilen müsste, wie der Header aussieht. Ich müsste alles quasi "drumherum" für den Header einen eigenen Lese-Schreib-Prozess anlegen, der abseits aller Validierungs- und Postprozesse läuft.

Thema: Übermittelung generischer Bedingungen bei Verarbeitung von Datensätzen
Am im Forum: Rund um die Programmierung

Kann man wohl machen. Widerstrebt aber sicher dem Single Responsibility Prinzip.

Zitat
Weiterer Vorteil bei dem Observer ist, dass du mehrere Aktionen am Ende durchführen kannst (z.B. Benachsrichtigung des Users, Schließen der Streams, Anstoßen der weiteren verarbeitung, ...)

Da gebe ich dir recht.

Thema: Übermittelung generischer Bedingungen bei Verarbeitung von Datensätzen
Am im Forum: Rund um die Programmierung

Hi winSharp93,

das mit den Magic Strings ist natürlich richtig.

Zitat
wenn du tatsächlich action-spezifische Prädikate verwendet, würde ich diese nicht in einer separaten Klasse implementieren, sondern gleich in die Klasse packen.

Was meinst du an dieser Stelle mit "gleich in die Klasse packen"?
Zitat
Der Producer könnte dann am Ende ein "Event" feuern (unter Java halt einen Observer benachrichtigen), woraufhin dann der Stream geschlossen wird; dies muss IMHO nicht in einer Aktion erfolgen.

Wäre sicher auch eine gute und saubere Lösung. Was den Faktor "Aufwand" angeht, ist der nicht geringer als derjenige beim Event "feuern". (Da ich den Observer in Java leider mit Interfaces implementieren muss)

Thema: Übermittelung generischer Bedingungen bei Verarbeitung von Datensätzen
Am im Forum: Rund um die Programmierung

Hallo!

Danke für die wertvollen Tipps. Ich überlege ich gerade, wie ich den Prozess sauber beeden kann.

Ich programmiere aktuell in Java und nicht in C#, darum kann ich die Delegatenlösung nicht verwenden. Weil die Kompetenz hier höher ist als in den deutschsprachigen Java-Foren, schreibe ich aber lieber hier.

Was ich also aktuell tue ist, dass ich ein "Finished" in die Queue schiebe. Auf dieses wird dann wieder eine ValidationCommand ausgeführt, was prüfen muss, ob der Inhalt "Finished" ist, wenn ja feuert der Invoker, das ExecutionCommand zum Beenden.


public class Producer implements Runnable {

	private BlockingQueue<String[]> lineQueue;
	private CSVReader csvReader;

	public Producer(BlockingQueue<String[]> lineQueue, CSVReader csvReader) {
		this.lineQueue = lineQueue;
		this.csvReader = csvReader;
	}

	public void run() {
		try {
			while (csvReader.getNextLine() != null) {
				lineQueue.put(new String[] { "bla", csvReader.getValueByName("GEBURTSTAG") });
			}

			lineQueue.put(new String[] { "Finished" });
			csvReader.closeStream();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

public class Consumer implements Runnable {

	private BlockingQueue<String[]> lineQueue;
	private AbstractInvoker<String[]> commandInvoker;

	public Consumer(BlockingQueue<String[]> lineQueue, AbstractInvoker<String[]> commandInvoker) {
		this.lineQueue = lineQueue;
		this.commandInvoker = commandInvoker;
	}

	public void run() {
		boolean isRunning = true;

		while (isRunning) {
			String[] lineItem = null;
			try {
				lineItem = lineQueue.take();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (lineItem[0].equals("Finished")) {
				isRunning = false;
				commandInvoker.invokeCommand(new String[] { "Finished" });
			} else {
				commandInvoker.invokeCommand(lineItem);
			}

		}
	}

public class FireEndPredicate implements IValidationPredicate<String[]> {

	public boolean validate(String[] obj) {
		return obj[0].equals("Finished") ? true : false;
	}

}

public class FireEnd implements IExecutionCommand<String[]> {

	private CSVWriter myWriter;
	private OutputStream outStream;

	public FireEnd(OutputStream outStream) throws IOException {
		this.outStream = outStream;

		myWriter = new CSVWriter(outStream);

	}

	public void execute(String[] obj) {
		myWriter.closeStream();
		System.out.println("END");
	}
}



public class Invoker<T> extends AbstractInvoker<T> {
	/*
	 * (non-Javadoc)
	 * 
	 * @see 
	 */
	@Override
	public void invokeCommand(T parameter) {
		for (IValidationPredicate<T> string : getPredicateMap().keySet()) {
			if (string.validate(parameter)) {
				getPredicateMap().get(string).execute(parameter);
			}
		}
	}

}

Was mich daran stört, ist der Aufwand, der betrieben werden muss, nur um den Stream zu closen.

Geht das auch besser? Ist es sinnvoller, dies nicht als ExecutionCommand auszuführen? Wenn ja, müsste der Consumer eine Referenz auf den Stream erhalten, um das Closen anzustoßen, was aber irgendwo ein wenig gegen das Grundkonzept verstoßen würde, oder nicht?

Vielen Dank
MVP

Thema: Übermittelung generischer Bedingungen bei Verarbeitung von Datensätzen
Am im Forum: Rund um die Programmierung

Zitat
Wo ist da jetzt das Problem?

Problem grundsätzlich keins. Ich wollte nur wissen, ob das, was ich vorhabe, good oder bad practice ist. Die Umsetzung sollte dann kein großes Problem sein.
Zitat
Serialisieren der Rules in/aus XML?

Ist eine sehr gute Idee.

Thema: Übermittelung generischer Bedingungen bei Verarbeitung von Datensätzen
Am im Forum: Rund um die Programmierung

Hallo,

es geht bei mir um Folgendes: ich lese eine CSV-Datei ein. Auf diesen Zeilen sollen Prüfungen auf gewisse Bedingungen ausgeführt werden. Sei Spalte 1 ein Zahlenwert, dann könnte man beispielsweise prüfen, WENN Spalte1.Wert > xy, DANN tue dies. Das "dies" bedeutet in meinem Fall, schreibe genau diesen Datensatz, bei dem die Bedingung erfüllt ist, in eine andere CSV-Datei.

Ich könnte natürlich nun hergehen, eine Klasse schreiben, die die Zeilen liest und Methoden, die auf jeder dieser Zeilen die Prüfungen ausführen und entsprechend die Daten wegschreiben. Das möchte ich aber nicht, sondern ich möchte diese Prüfungen generisch hinzufügen oder entfernen können.

Die Frage ist, wie macht man das am besten?

Da man hier keine Tipps bekommt, ohne vorher selbst Ideen zu haben. Hier kurz, was ich mir überlegte:

Ich dachte an etwas wie den Java-Executor-Service oder eine Art Command Pattern, wobei ich die Befehle in einer Liste ablege. Ich müsste dann auf jeder gelesenen CSV-Zeile alle Prüfungsbefehle ausführen. Diese Befehle müssten dann Schreibmethoden auf einem entsprechenden CSV-Schreiber ausführen. Was für diese Idee spricht, ist die Einfachheit, mit der sich der Vorgang parallelisieren lässt, denn ich erwarte CSV-Files mit mehreren Millionen Einträgen. Klar, auch das sollte sequentiell noch recht fix gehen, aber man weiß ja nie... Jedenfalls könnte ich dann in einer Queue die Zeilen/Befehle ablegen und in einer Producer-Consumer-Verfahren abarbeiten.

Bin auf eure Anregungen gespannt
MVP

Thema: Hat mein Arbeitgeber das Recht, Mitarbeiterfotos ins Netz zu stellen?
Am im Forum: Smalltalk

Sowas hat ja meistens reine Marketinggründe. Der Kunde soll sich ja letztlich ein Bild davon machen, wer sein Dienstleister ist. Solche Seiten sind ja meist noch um irgendwelche Daten wie Ausbildung, Kompetenzen usw. angereichert.
Öffentlich muss das aber aus meiner Sicht nicht sein. Ich war bei einer Firma, wo das eben intern geschieht, d.h., der Kunde bekommt von jedem Mitarbeiter des Projektes Profile mit Foto, Ausbildung, Projekten, Zertifikaten etc. und kann dann die Mitarbeiter auswählen, die er haben möchte.

Thema: typeof/is/if-Ketten auch dann vermeiden, wenn dynamische Bindung nicht anwendbar ist
Am im Forum: Rund um die Programmierung

Da hast du natürlich recht. Solche Fälle sind schon stark konstruiert. In meinem konkreten Fall es einfach eine menschliche Entscheidungen (eines Architekten), dass keine Methoden nach implementiert werden sollten. Ich erhielt den Auftrag, die if-else-statements in "Methoden" oder "Objekte" auszulagern. Das macht zwar den Code etwas übersichtlicher und reduziert die NPath-Complexity, behebt aber nicht das substanzielle Problem. Ich jedenfalls wollte die Typprüfungen einfach loswerden.