Ola,

Ik las gisteren een tutorial die betrekking had op een Person class. Nu vroeg ik me iets af. Om een naam te setten en getten werd ongeveer dezelfde opzet gebruikt die ik zelf ook gebruik. Een setter en getter voor de voornaam, achternaam en het tussenvoegsel, en dan een getter voor de volledige naam die gegenereerd wordt op basis van deze 3 gegevens. In het voorbeeld stond alle code gewoon in de Person class zelf, maar er werd ook gezegd dat je die code in een aparte (Person)Name class zou kunnen verwerken.

Nu vroeg ik me dus af of het slim/gebruikelijk is om voor de naam een aparte Name class te gebruiken, en dat je deze class vanuit de Person class gebruikt om de naam te setten en getten. Anders gezegd, moet je de naam als een los object zien? Je zou dan dus zeg maar zo'n soort constructie krijgen:

<?php

class Person {

$name;

public function construct() {
$this->name = new Name();
}

public function setFirstName($first_name) {
$this->name->setFirstName($first_name);
}

public function setPrefix($prefix) { ... }

public function setLastName($last_name) { ... }

public function generateFullName() {
return $this->name->generateFullName();
}

// enz.

}
?>
Je moet daarvoor niet naar de naam op zich kijken, maar naar de functie of zelfs het doel van de naam.

Simpel gesteld: gebruik je de naam vaak los of gebruik je de naam altijd in de context van een persoon?

Probeer eerst een antwoord te vinden op functionele vragen. Heeft de naam nog een betekenis buiten de class User? Zou je de class Name kunnen hergebruiken voor iets anders dan de namen van personen? En zou je namen dan opslaan in een aparte databasetabel?
Het hangt er maar vanaf welke pattern je gebruikt.

Je zou het decorator pattern kunnen gebruiken bijvoorbeeld om extra functionaliteit aan een class toe te voegen. bijv de naam
@Ward:

Oké. Ik zou zeggen dat een naam altijd gerelateerd is aan een persoon. Dus dan hoef ik geen extra class te maken?

@Reshad:

Het is in dit geval geen "extra" functionaliteit. Het is meer de vraag of je de functionaliteit moet "bundelen" in een aparte class.
Je kunt alles dat een persoon "is" of een persoon "beschrijft" onderbrengen in een aparte klasse, niet alleen een class Name, maar ook een class Gender, een class Length, een class EyeColor, een class Address, enzovoort.

De vraag is niet of het kan, maar of je het nodig hebt. Soms misschien wel (bijvoorbeeld bij een adres), maar vaak ook niet.
Oké, thanks.
En die vraag beantwoord je dus als: Welke pattern ga ik gebruiken en waarom ga ik die pattern gebruiken. Dus niet omdat jij ergens code hebt gezien en afvraagt of dat beter is. Het antwoord is Ja en Nee.

In de situatie van die persoon kan het heel nuttig zijn dat hij het op die manier heeft gedaan maar in jou situatie heb je het misschien helemaal niet nodig dus kan je het combineren in je user class.
Oké. Die persoon had het zelf ook niet gedaan, maar hij vertelde erover. Vandaar dat ik het me afvroeg. Ik weet weer even genoeg :)

Reageren