Usando una classe come attributo in un'altra classe o solo un valore?

-2

Ho uno script PHP che ha una classe di gruppo e una classe componente. Ogni gruppo è composto da diversi componenti. Il mio gruppo ha attributi groupName, groupId e componentList. Il mio componente ha un componenteName, un componenteId, un componenteStatus. È necessario assegnare un groupId a un componente per crearlo (quindi il componente viene memorizzato nel gruppo con il groupId assigend).

Ora la mia domanda è: Un attributo per componente dovrebbe essere 'groupId' (che è necessario per la creazione) o dovrebbe essere l'oggetto 'gruppo' stesso?

Temo, se uso il "gruppo" si romperà se voglio stampare il mio gruppo perché "group" ha componentList come attributo, quindi si ripeterebbe in modo ricorsivo perché ogni singolo componente ha il suo gruppo e ogni gruppo ha il suo componentList e così via.

    
posta Juri_Wolkow 07.09.2018 - 12:54
fonte

1 risposta

0

Il vero problema sembra essere la visualizzazione di componenti e gruppi, non se un componente debba avere un "gruppo" o un "groupId".

Questi sono due problemi separati che richiedono risposte separate.

Quindi per rispondere:

Should an attribute for component be 'groupId' (which it necessary needs for creation) or should it be the 'group' object itself?

Se, dato un componente, non hai mai bisogno di più del groupId, allora groupId è sufficiente. Se hai bisogno di più del groupId, allora hai bisogno dell'intero gruppo come attributo di un componente.

Ora, per risolvere questo problema:

I fear, if I use 'group' it will crash if I want to print my group out because 'group' has componentList as an attribute so it would recursively repeat itself because every single component has its group and every group has its componentList and so on.

È necessaria una classe separata o un modello che sappia non stampare in modo ricorsivo i componenti associati al gruppo associato al componente che si sta visualizzando. Non creare codice ricorsivo:

<!-- in component.php -->

<h1>
    <?= $component->getName() ?>
    <small><?= $component->getGroup()->getName() ?></small>
</h1>

<?php foreach ($component->getGroup()->getComponents() as $siblingComponent) ?>
    <!-- Don't do this! -->
    <? include('component.php') ?>
<? endforeach; ?>
    
risposta data 07.09.2018 - 13:11
fonte

Leggi altre domande sui tag