Click4Money Δημοσ. 22 Φεβρουαρίου 2018 Δημοσ. 22 Φεβρουαρίου 2018 (επεξεργασμένο) Καλησπέρα σας, έστω ότι έχουμε υλοποιήσει αρκετά καλά ένα σύστημα και είναι όλα τα objects decoupled. Στην μεριά του client όμως υπάρχει το μειονέκτημα στο ότι χρειάζεται να πολυλογήσει κανείς ώστε να κάνει αυτό που θέλει, όπως για παράδειγμα πιο κάτω (στο οποίο το τελικό αποτέλεσμα είναι ένα array με links): $textArray = new TextArray(); $textArray->addTransformer(new UrlTransformer($parameter)); $textArray->addCleaner(new UrlCleaner(parameter)); $itemCollection = new ItemCollection(); $item = new Item(parameter1, parameter2, parameter3); $itemCollection->add($item); $collector = new Collector(); $collector->collect($itemCollection, parameter2); $urls = $collector->collectedData; Θα ήταν σωστό pattern να δημιουργήσω μια κλάση π.χ. "UrlGenerator" στην οποία να χώσω όλο το πιο πάνω και ο client το μόνο που να είχε να κάνει να ήταν κάπως έτσι: $urlGenerator = new UrlGenerator(parameter1, parameter2, parameter3, parameter4) $urls = $urlGenerator->create() Επεξ/σία 22 Φεβρουαρίου 2018 από Click4Money
defacer Δημοσ. 22 Φεβρουαρίου 2018 Δημοσ. 22 Φεβρουαρίου 2018 Χωρίς να ξεκινήσουμε τη φιλοσοφία, αυτό που λες είναι ΟΚ και μάλιστα υπάρχει και σε design pattern (όχι φιλοσοφία άλλα δεν ξέρω γιατί ανέφερες τον όρο καν) και λέγεται facade. Φυσικά το αν είναι καλή ιδέα ή καταστροφή εξαρτάται από τις λεπτομέρειες της περίπτωσης και δεν υπάρχει αυτό το context, οπότε την απάντηση μου δες τη γενικά.
Click4Money Δημοσ. 22 Φεβρουαρίου 2018 Μέλος Δημοσ. 22 Φεβρουαρίου 2018 Ευχαριστώ πολύ @defacer θα το κοιτάξω. Κάποια στιγμή θα ανεβάσω το project στο github για να το δεις αν έχεις χρόνο. Θα μου ήταν πολύ χρήσιμες οι παρατηρήσεις σου στο να βελτιωθώ!!
defacer Δημοσ. 22 Φεβρουαρίου 2018 Δημοσ. 22 Φεβρουαρίου 2018 @Click4Money δες και ένα μικρούλι παράδειγμα facade από δικό μου κώδικα (PHP). Η ιδέα εδώ είναι πως η ReservoirSampler (υλοποιεί τον Algorithm R) σου δίνει ένα πολύ πολύ γενικό interface για να κάνεις ο,τι θες, αλλά επειδή στην πράξη 99% of the time δε σε ενδιαφέρει τόση λεπτομέρεια μπορείς να καλέσεις κατευθείαν την sample() για να κάνεις τη δουλειά σου "with reasonable defaults" και χωρίς πολλά πολλά. final class ReservoirSampler { /** * @var RandomnessSourceInterface */ private $randomnessSource; private $reservoir; private $observedItemCount; public function __construct(RandomnessSourceInterface $randomnessSource, int $sampleSize) { $this->randomnessSource = $randomnessSource; $this->reset($sampleSize); } /** * @param \Traversable|array $input * @param int $sampleSize * * @return array */ public static function sample($input, int $sampleSize): array { $sampler = new self(new MersenneTwisterRandomnessSource(), $sampleSize); foreach ($input as $item) { $sampler->observe($item); } return $sampler->getSample(); } public function getSampleSize(): int { return count($this->reservoir); } public function reset(int $sampleSize) { $this->observedItemCount = 0; $this->reservoir = array_fill(0, $sampleSize, null); // what we initialize with should not actually matter } public function observe($item) { $sampleSize = $this->getSampleSize(); if ($this->observedItemCount < $sampleSize) { $this->reservoir[$this->observedItemCount++] = $item; } else { $random = $this->randomnessSource->getNextRandom(0, $this->observedItemCount++); if ($random < $sampleSize) { $this->reservoir[$random] = $item; } } } public function canSample(): bool { return $this->observedItemCount >= $this->getSampleSize(); } public function getSample(): array { if (!$this->canSample()) { throw new InsufficientInputException( sprintf( 'Cannot produce a sample of size %d because only %d items have been observed.', $this->getSampleSize(), $this->observedItemCount ) ); } return $this->reservoir; } }
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα