Allgemeine Fragen bez. WebDev

03/07/2018 11:36 Mad0ck#1
Guten Tag Liebe epvp Com.,

Ich habe vor ca einem Jahr meine Diplomarbeit abgegeben.
Das Projekt war grob gesagt eine umfangreich Website zu erstellen.

Da ich seither eig kaum was davon angegriffen habe, und ich mich jetzt wieder täglich mit der Materie befasse wollte ich paar Sachen vorher abklären/fragen.








Ich weiß, es ist viel text, dennoch würde ich mich trotzdem freuen, falls erfahrene Hobby oder auch berufliche Programmierer sich die Zeit nehmen würden.
03/07/2018 14:51 florian0#2
Bei Objektorientierung geht es in erster Linie darum, Informationen die zusammengehören, zusammenzufassen. z.B. kannst du ein User-Objekt haben, welches alle Relevanten Informationen zu einem User gebündelt hat.
Genauso kannst du alle Funktionen die einen User betreffen diesem Objekt zuordnen.
So schaffst du eine gewisse Abstraktion bei der du dich beim Verwenden des Objektes nicht mehr darum kümmern musst, dass alle Infos da sind, Queries korrekt ausgeführt werden, etc. Das macht alles dein Objekt für dich, du schreibst nur ... User::getByName("florian0") oder whatever und hast den User.


Logic und Layout trennen: Unbedingt! Nennt sich Template.
Bereite alle Daten vor die angezeigt werden sollen und übergib sie der Template Engine (ob selbstgeschrieben oder Framework ist an der Stelle egal). Die Template Engine kümmert sich dann darum, dass deine übergebenen Daten an den korrekten Stellen eingefügt werden.
Die einfachste Template Engine ist übrigens PHP selbst.

Code:
<html>
<head>
<title><?= htmlentities($seiten_titel); ?></title>
</head>
<body> .... </body>
</html>
Nun kannst du (Achtung Potatocode) z.B. folgendes schreiben:
Code:
// Komplexe Logik die den Titel zusammensetzt
$seiten_titel = "elitepvpers";

require_once("template.php");
Und schon kannst du einerseits dein Template schön bearbeiten, andererseits deinen Code lesen ohne zwischen HTML-Tags suchen zu müssen. Ist auch für den Designer angenehmer, falls du mal mit einem zusammenarbeitest.

Frameworks werden überall eingesetzt. Ob das jetzt fertige CMS sind, die man über Plugins erweitert oder Allround-Frameworks wie Laravel.
Natürlich erschwert einem ein Framework die Entwicklung, man kann viele Dinge nicht so tun, wie man sie gerne hätte, sondern muss sich den Gegebenheiten des Frameworks unterwerfen. Im Gegenzug nimmt dir ein gutes Framework aber eine ganze Menge an Arbeit ab, in dem es dir eine Reihe von Bibliotheken für Templates, Formatierung, Verarbeitung, etc. liefert und du nicht das Rad neu erfinden musst.


Berechtigungssysteme gibt es diverse Ansätze. Jenachdem wie flexibel du es brauchst, machen diese für dich sinn, oder auch nicht. Wenn du nur einen Admin hast der über ne Mail garantiert identifizierbar ist, warum nicht?
Wenns mehrere Admins gibt, mach ein Flag in der Datenbank a'la "is_admin", wenns mehrere Benutzergruppen gibt, leg Ränge an. Wenns viele Berechtigungen gibt und/oder es dynamisch sein soll, leg Berechtigungs-"schlüssel" an. (Eine Gruppe hat dann z.B. die Schlüssel "ARTICLE_CAN_PUBLISH" und "ARTICLE_CAN_EDIT", und kann damit Blog Artikel editieren, aber z.B. keine User bearbeiten.).
Gibt unendliche viele Möglichkeiten. Nimm die, die passt und machs nicht zu kompliziert.
03/07/2018 15:07 Mad0ck#3

Danke für die schnelle und vorallem ausführliche Antwort.
Im Endefekt muss ich mich nun mit Obj.orientierten programmieren sowie Frameworks auseinandersetzen.
Logik und Layout zu trennen da werde ich mich auch nochmals reinfuchsen müssen.

Ich bedanke mir herzlich bei dir =)
03/11/2018 17:52 Legithos#4
Florian0 hat das super erklärt, hab noch ein klein wenig zu ergänzen.

Ob du nun objektorientiert programmierst oder nicht liegt natürlich bei dir. Der meiner Meinung nach größte Vorteil in der Objektorientierung ist die Übersichtlichkeit (für zb Fehlersuche). Du solltest wissen, dass Objektor. derzeit schon die gängige Praxis ist (heißt es kommt vorallem bei Arbeiten denke ich besser an), jedoch ist auch alles ohne realisierbar und nicht weniger richtig! Bezüglich der Admin-Frage mach ich es immer mit 0 und 1 bei 'usertype' für kein Admin und Admin und je nachdem wird der Menüpunkt 'Eigenes Profil' oder 'Adminpanel' (um alle Profile inkl eigenes zu bearbeiten) angezeigt.

Bei weiteren Fragen gerne melden !
03/12/2018 10:40 Mad0ck#5
Quote:
Originally Posted by Legithos View Post
Florian0 hat das super erklärt, hab noch ein klein wenig zu ergänzen.

Ob du nun objektorientiert programmierst oder nicht liegt natürlich bei dir. Der meiner Meinung nach größte Vorteil in der Objektorientierung ist die Übersichtlichkeit (für zb Fehlersuche). Du solltest wissen, dass Objektor. derzeit schon die gängige Praxis ist (heißt es kommt vorallem bei Arbeiten denke ich besser an), jedoch ist auch alles ohne realisierbar und nicht weniger richtig! Bezüglich der Admin-Frage mach ich es immer mit 0 und 1 bei 'usertype' für kein Admin und Admin und je nachdem wird der Menüpunkt 'Eigenes Profil' oder 'Adminpanel' (um alle Profile inkl eigenes zu bearbeiten) angezeigt.

Bei weiteren Fragen gerne melden !
Danke.
Sobald ich etwas weiter im Bereich C++ bin, werde ich mich wieder etwas aktiver dazu setzen. Muss paar Websiten für die nächsten Bewerbungsgespräche aufweisen können :p
03/12/2018 11:52 __EAX#6
Hallo Mad0ck,

auf die ersten beiden Fragen wurde meiner Meinung nach schon sehr präzise geantwortet, doch habe ich noch etwas zum Thema Frameworks sowie AdminPanel beizutragen.

Es gibt derzeit zahlreiche PHP-Frameworks im Web, die größtenteils sogar vollumfänglich kostenlos sind und quelloffen.

Laravel, das auf Symfony aufbaut, ist ein sehr mächtiges und sehr umfangreiches Framework. Das macht es zunächst nicht ganz leicht, es in Gänze zu durchschauen bzw. zu verstehen, aber das gibt sich mit der Zeit - in jedes Framework wirst du dich zunächst einarbeiten müssen.
Besonders dann, wenn es Techniken anwendet, mit denen du bisher noch keine Erfahrungen gesammelt hast (bei Laravel z.B. Stichwort Blade-Templating, Routing, Models, Controllers, Database Migrations, ...).

Laravel bietet beispielsweise einen hauseigenen Broadcastservice an: [Only registered and activated users can see links. Click Here To Register...]. Die meisten Videos dort sind kostenfrei, die etwas mehr sophisticated/tiefer in die Materie gehenden dann z.T. nicht. Die Videos sind getreu ihrem Motto ("It's kinda like Netflix for your career") in Episoden bzw. Serien gestaffelt und machen es dir leicht, von Anfang an mit dem Framework zu beginnen. Ich konnte Laravel sehr gut mittels Laracasts näher kennenlernen (zuvor war ich bereits "konventioneller" PHP-Entwickler) und musste für die Themenbereiche, die ich tatsächlich gebraucht hatte, nichts bezahlen. Die Mitgliedschaft kostet dort 15 $ im Monat. Das Forum, was Laracasts einschließt, ist kostenfrei und du kannst dort deine Fragen posten (besonders am Anfang, das kann ich dir aus erster Hand berichten, wirst du dort öfter vorbeischauen - ob durchs Googlen oder Selbstfragen); der Community-Support ist da durchaus sehr gut und hilfreich m.E.

Das alles hat nur einen Haken (oder auch nicht): Es ist auf Englisch - vollständig. Für mich war das überhaupt kein Problem, nur kenne ich durchaus einige meiner Kollegen, die sich soetwas nicht gerne auf Englisch nähern - das musst du wissen.

Frameworks werden besonders bei mittleren oder größeren Projekten zum Einsatz gebracht, um eine gewisse grundsolide Sicherheit bzw. später die Wartbarkeit sicherzustellen. Paketmanager wie Composer sind unmittelbar Teil dieser Frameworks, die ebengenannte Wartbarkeit garantieren sollen.
Man kann, -zumindest aus meiner Erfahrung heraus-, also durchaus sagen, dass Frameworks besonders dann zum Einsatz kommen, wenn's um ein geweisses Maß an Ernsthaftigkeit oder Seriosität geht; diese Frameworks "blasen" natürlich dein Projekt auf und machen es, -ganz gleich ob du gut damit umgehen kannst oder nicht-, unübersichtlicher und größer, und diesen Mehraufwand braucht man sich nicht leisten, wenn man "es nicht ernst genug meint" bzw. der seriöse Anwendungszweck einfach nicht gegeben ist.

Viele Webseiten von Privatservern jedweder Art von Spielen sind nicht gut entwickelt bzw. programmiert und sind daduch anfällig für Hackerangriffe - dadurch gibt es immer wieder Datenbankleaks oder Sonstige. Und dann gibt es gelegentlich gut durchdachte und entwickelte/programmierte Privatserver mit dazugehöriger Webseite - auch, wenn diese vielleicht nicht auf ein großes Framework wie Symfony oder Laravel setzt, setzen Coder, die einem Projekt eine gewisse Ernsthaftigkeit beimessen, auf kleinere, sogenannte leightweight Frameworks wie beispielsweise Laravel Lumen oder CakePHP. Auch CodeIgniter ist für solche Projekte durchaus interessant.

Es kommt demnach also immer primär auf den Anwendungszweck und die Größe bzw. den Umfang deines Projektes an.


Zum Thema AdminPanel: Natürlich genügt es zur technischen Funktion, dass du einen nummerischen Wert auf 0 bzw. 1 setzt für ein Attribut in deiner Datenbanktabelle (z.B. "admin"; 0 = false, 1 = true). Ich kenne dein Projekt nicht im Einzelnen, aber bedenke, dass du dabei ein binäres Rechtesystem schaffst: User und Admin. Dabei lässt du zunächst nicht zu, eine weitere Berechtigung (wie z.B. die eines Moderators) hinzuzufügen, ohne signifikant in deinen Code wieder einzugreifen. Du könntest stattdessen beispielsweise ein Attribut "rank" aufstellen, das beispielsweise so funktioniert: "0" = gesperrt, keine Berechtigungen, "1" = User, "2" = Moderator, "3" = Admin. So könntest du ein kleines Rechtesystem implementieren. Im nächsten Schritt wäre eine weitere Datenbanktabelle z.B. "Permissions" möglich, wo du dann gemäß des Ranges einer Berechtigung einen Namen zuteilst und diese erlaubst (z.B. "user.login" erfordert "rank" = "1", bzw. "admin.login" "rank" = "3"). Aber auch hier gilt: Kenne den Umfang deines Projektes. Sowas kann sehr nützlich bzw. hiflreich weiterhin sein, wenn man zu Beginn ein kleines System wie o.g. implementiert, doch unnötig und nervig-zeitraubend, wenn man es nie benötigen wird.

Entschuldige bitte diesen Beitrag der Länge der Bibel. :-D
03/12/2018 18:48 Mad0ck#7

Ich danke dir herzlich für die Zeit und Mühe, welche du für die Antwort aufgebracht hast !

Die Länge der Antwort ist nicht schlimm. Ich sehs so je mehr hier steht desto mehr kann ich lernen.
Antworten von Leuten mit mehr Erfahrung oder generell mehr Praxiserfahrung ist immer gut für Anfänger, da so etwas in keinem Buch steht.

Jedenfalls merke ich langsam, dass ich viel zum nachlernen bzw generell zum lernen habe.
Wobei man sagen muss, in so einer Branche hat man nie wirklich ausgelernt :p

Danke nochmals !