On 04.08.2012 15:18, Oliver Sch@d wrote:
> Robert Klemme wrote:
>
>> On 04.08.2012 13:24, Oliver Sch@d wrote:
>>> In Ruby sehe ich, dass man strukturell oft dafür dann HTTP-
>>> Schnittstellen verwendet, um darüber ein API bereitzustellen, weil
>>> andere Mechanismen nicht vorhanden sind.
>>
>> Du wirfst Dinge durcheinander: HTTP wird für Verteilung (im Netzwerk)
>> benutzt. Ein C-Header definiert die Schnittstelle (oder sogar mehr)
>> eines Moduls (wobei die Sprache kein explizites Modulkonzept hat - im
>> Gegensatz zu C++, wo man Klassen als Module betrachten kann).
>> Natürlich stellt beides eine API zur Verfügung, aber man würde in Ruby
>> sicherlich keine Schnittstelle über HTTP bereitstellen, wenn
>> Verteilung nicht erforderlich ist.
>
> Wie baust du sonst in Ruby eine unabhängige Blackbox mit definierter
> Schnittstelle?
Definiere "unabhängig". Grundsätzlich genau so wie in C++: Namespaces,
Klassen etc.
>>> Ich gebe zu, dass das alles eine ziemlich abstrakte Betrachtung ist.
>>> Aber nehmen wir mal an, du bist Software-Architekt und musst ein
>>> großes Projekt organisieren. Wie entscheidest du dich für eine
>>> Technik, wenn nicht auf einem abstrakten Betrachtung?
>>
>> Ich denke über die Anforderungen des konkreten Projektes nach.
>
> Wenn große Projekte starten, haben sie die Eigenart, dass über die
> Details wenig bekannt ist. Man hat ein großes Ziel, einige wenige
> konkrete Anforderungen und muss nun anfangen. Zumindest, wenn man im
> Webbereich arbeitet, ist das regelmäßig genauso der Fall.
"Webanwendung" ist ja schon viel konkreter. Das schränkt die Anzahl
sinnvoller Architekturen deutlich ein.
> So was in der Art wie "wir wollen eine große Börse im Web für
> $DIENSTLEISTUNG machen".
>
> Dir ist vielleicht klar, welche Akteuere es gibt (Leute, die was
> einstellen, Leute, die was an der Börse beziehen wollen), es gibt
> Buchhaltung, Marketing, BI usw.
Admin...
> Es gibt vielleicht schon ein Grob-Web-Design und ein paar Abläufe in
> Grobdarstellung, der Rest wird dann noch gefunden, im laufenden Produkt-
> Management.
An der Stelle scheinen mir eher andere Informationen ausschlaggebend für
die Wahl der Architektur bzw. des Frameworks, z.B. erwartete
Benutzerzahl und parallele Sessions, Lastprofil (Änderungen vs.
Lesezugriffe), Datenvolumen... Solche Dinge müssen auf jeden Fall klar
sein - sonst fängst Du mit einer Plattform für 100 Benutzer an und
nachher meint der Kunde, dass da aber mal 5 Millionen drauf sein sollen.
> Danach kannst du Leute suchen gehen, die dir helfen das Projekt
> umzusetzen, denn viel konkreter wird es erst im laufenden
> Produktmanagement, was aber dann schon mit Entwicklern, die irgendeine
> Sprache beherrschen oder aber auch nicht, zusammen geschieht.
>
> Welche Sprache nimmst du jetzt und warum?
Wenn das Team nicht von vornherein feststeht, hast Du in gewisser Weise
eine Catch 22-Situation: ohne die Skills zu kennen, kannst Du kein
Framework / Platform / Sprache / Technologie auswählen - ohne die
Technologie weißt Du nicht, welche Leute Du anheuern sollst.
Dann ist es sinnvoll zweigleisig vorzugehen: zum einen schauen, welche
Fähigkeiten am Markt angeboten werden (es sei denn $DIENSTLEISTUNG ist
die Börse für Entwickler, die Dir erst die Marktübersicht geben würde
:-)) und welche bekannten Frameworks gut zu den Anforderungen passen.
Dann versuchen einen Best-Match herzustellen.
> Und wenn du das für unrealistisch hälst - das ist in meiner Welt Alltag,
> dass es genauso läuft.
Blöd. Ein stabiles Team ist auf jeden Fall produktiver - und ich bin
außerdem davon überzeugt, dass es bessere Qualität liefert (z.B. weil
die Leute nicht am Ende des Projektes auseinander gehen und dadurch mehr
Verbindlichkeit herrscht).