Avatar użytkownika - upload plików

Upload plików, wydawało by się proces trywialny jednak wystarczy rzucić okiem na dokumentację Doctrine dla Symfony aby zobaczyć jak bardzo można ten proces skomplikować.

// src/AppBundle/Entity/Document.php
namespace AppBundle\Entity;

class Document
{
    public $id;

    public $name;

    public $path;

    public function getAbsolutePath()
    {
        return null === $this->path
            ? null
            : $this->getUploadRootDir().'/'.$this->path;
    }

    public function getWebPath()
    {
        return null === $this->path
            ? null
            : $this->getUploadDir().'/'.$this->path;
    }

    protected function getUploadRootDir()
    {
        // the absolute directory path where uploaded
        // documents should be saved
        return __DIR__.'/../../../../web/'.$this->getUploadDir();
    }

    protected function getUploadDir()
    {
        // get rid of the __DIR__ so it doesn't screw up
        // when displaying uploaded doc/image in the view.
        return 'uploads/documents';
    }
}

Przykład nie dość, że skomplikowany (prostego kodu nie trzeba oszpecać komentarzami) to jeszcze może okazać się tragiczny w skutkach. Dlaczego dokument, reprezentujący plik ma decydować o tym gdzie jest zapisany? To tak jakby adres email miał decydować czy jest unikalny w kontekście systemu. Zarówno plik jak i email to wartości, wartości istniejące w jakimś kontekście. Wymuszanie na pliku aby wiedział pod jaką nazwą jest zapisany to prawie to samo co wymuszanie na adresie email aby potrafił sprawdzić czy jest unikalny.

Save repository from save

Repozytorium, reprezentacja kolekcji pozwalająca na uzyskanie dostępu do obiektów domenowych.
Czy jednak repozytorium powinno również zajmować się aktualizowaniem stanu obiektów i zapisywaniem tego stanu?

interface Repository 
{
    public function add(Object $object);

    public function remove(Object $object);

    public function getBy(Criteria $criteria);

    public function hasAnyMatching(Criteria $criteria);

    public function update(Object $object);
}

public function update(Object $object); tego w ogóle nie powinno tu być!

Programisto, nie zrób sobie krzywdy Scrumem

“Odkrywamy nowe metody programowania dzięki praktyce w programowaniu
i wspieraniu w nim innych.
W wyniku naszej pracy, zaczęliśmy bardziej cenić:
ludzi i interakcje od procesów i narzędzi,
działające oprogramowanie od szczegółowej dokumentacji,
współpracę z klientem od negocjacji umów,
reagowanie na zmiany od realizacji założonego planu.
Oznacza to, że elementy wypisane po prawej są wartościowe,
ale większą wartość mają dla nas te, które wypisano po lewej.”

To jest polska wersja odezwy wielu niezwykle uhonorowanych osób z branży IT, nazywa się manifestem agile. Zastanówmy się, co łączy Kenta Becka, Martina Fowlera, Roberta C. Martina i wielu innych, podpisanych pod manifestem?

Akceptuję

Ten serwis używa plików cookies. Więcej o plikach cookies.