Zunächst mal ganz allgemein:
Jedes Fremdprodukt, das in eine Software einfließt, macht es abhängig, und zwar auf Jahre hinaus.
Deshalb, aber auch, wie noRiddle treffend anmerkte, wegen des Ballasts, bin ich kein großer Freund irgendeines Frameworks.
Kompatibilität zu alten Modulen ist sicher eine feine Sache, wenn ich die allerdings zum Primärziel mache, muss ich auf lange Sicht gesehen ein totes Pferd reiten.
Wenn wir mal ehrlich sind: ein alter Klepper ist Modified schon heute.
Andererseits macht gerade der Verzicht auf Frameworks und die prozedurale Programmierung Modified zum Rennpferd im Vergleich zur Konkurrenz.
Man könnte jetzt eine Grundsatzdiskussion über Sinn und Unsinn der OO-Programmierung anfangen, das liegt mir fern. Ich für mein Teil bin zu folgender Erkenntnis gelangt:
Objekte können eine ideale Ergänzung sein, aber die Welt besteht nicht nur aus Objekten, sondern auch aus Vorgängen. Ineffektiv wird die Programmierung, wenn sie Objekte in Prozeduren pressen will, aber auch, wenn sie Prozeduren in Objekte quetscht.
Wer's nicht glauben will, vergleiche die Performance konsequenter OO-Shops mit Modified oder noch besser: mit osCommerce.
Insofern bin ich geneigt, etwas wie "hybride Programmierung" zu favorisieren: Typische Objekte wie Artikel, Kunden, Warenkörbe sind als Objekte zu behandeln, typische Geschäftsprozesse sind (und bleiben) Prozeduren.
Als Ziel würde ich mir setzen, einen neuen Shop mit guter Performance, einem Minimum an Features, einem Minimum an Fremdprodukten und, das ist mir wichtig, einem absoluten Minimum an Admin-Funktionalität sowie ein Maximum an Schnittstelle zu WWS bzw ERP zu bieten. Es ist meiner Ansicht nach nicht sinnvoll, Auftragsbearbeitung, Bestellwesen, Lagerverwaltung, ... in einer Webumgebung zu machen.
Beginnen würde ich wie gesagt mit dem Datenmodell, indem ich die gewachsenen Möglichkeiten der Datenbank endlich einsetzen würde. Wir wollen bitte daran denken, dass unser Datenmodell aus einer Zeit stammt, in der MySQL noch keine Ahnung davon hatte, was referentielle Integrität ist. Leider ist (zumindest im Umfeld der Web-Programmierung) inzwischen eine ganze Generation von Programmierern herangewachsen, die kaum wissen werden, wovon ich rede.
Referentielle Integrität in der Datenbank bedeutet, dass mir die Datenbank einen Fehler um die Ohren haut, wenn ich z.B. versuche, einen Artikel zu löschen, der schon verkauft wurde.
Das klingt erst mal doof, bedeutet aber, dass niemand einen Artikel löschen kann, für den eine Auftrag vorliegt.
Diese (und weitere Geschichten) sind im Datenmodell zu implementieren, und deshalb ist und bleibt das Datenmodell das Fundament der ganzen Geschichte. Dort muss man anfangen.