ugrás a tartalomhoz

MVC könyvtárstruktúra

s_volenszki · 2009. Okt. 17. (Szo), 15.26
Az elmúlt hetekben volt szerencsém megismerni néhány MVC struktúrával szervezett nyílt forrású alkalmazást. Ennek hatására úgy döntöttem, hogy egy kicsit átalakítom a saját keretrendszeremet.

Van azonban két olyan kérdésem, gondolatom, amiben megerősítésre várok, kérlek segítsetek!

A könyvtárstruktúra így néz ki (ascii order nélkül):

/models
/views
/controllsers
/library
/locale/

és itt akadtam el, a következők miatt:

1.) Hova tegyem a css fájlokat és az egy-egy nézethez tartozó egyed js fájlokat? Logikusan a view részei, azon belül pedig egy-egy alkalmazásé. Ha például van egy site és egy blog az alkalmazás rendszerben, akkor a könyvtárak kinyitva ehhez hasonlítanak:
/models
    /site
    /blog
/views
    /site
        /css
        /js
    /blog
        /css
        /js
/controllers
    /site
    /blog

Ez így jó lehet?

2.) Ha user tud fájlokat feltölteni, azokat hova tegyem? Ha mondjuk az előző alkalmazás rendszer kiegészül egy filemanager-vel, akkor:
/models
    /site
    /blog
    /filemanager
/views
    /site
        /css
        /js
    /blog
        /css
        /js
    /filemanager
        /css
        /js
        /userfiles
            /username_1
                /images
                /docs
            /username_2
                /images
                /docs
            /username_3
                /images
                /docs
/controllers
    /site
    /blog
    /filemanager

Ez így jó lehet?

Várom a véleményeiteket, köszönöm!

s_volenszki
 
1

pubic

erenon · 2009. Okt. 17. (Szo), 15.51
CSS/JS, egyéb statikus fájlok, az oldal részeit képező képecskék:
Jól jársz, ha kialakítasz egy "public" mappát is. A webszerveren keresztül kívülről csupán ez a mappa legyen elérhető, így elkerülsz egy csomó későbbi problémát. A mappa tartalmazza az index.php-t, mint egyedüli bemenetet.
Ebből a megközelítésből már logikusan látszik, hogy a publik szekcióban kell helyet foglalniuk a statikusan kiszolgálandó elemeknek. Így persze sérül egy egészen kicsit a modulok egysége. Ha mindegyik rendelkezik saját css-el például, akkor is javaslom, hogy azokat egy wrapperen keresztül szolgáld ki, ha már nem megoldható a különcsomagolásuk.

Feltöltött fájlok:
Ha közvetlenül kell elérni őket, a megoldás adott: public/downloads. Ha nem, akkor pedig a vonatkozó kontroller szolgálja ki őket id alapján a downloads/uploads könyvtár alól, mely nem része a public-nak.
2

Ha jól értem ez mondod nekem.

s_volenszki · 2009. Okt. 17. (Szo), 16.19
Tehát:
usr/
    models/
        site/
        blog/
        filemanager/
    views/
        site/
        blog/
        filemanager/
    controllers/
        site/
        blog/
        filemanager/
usr/
    htdocs/
        site/
            css/
            js/
        blog/
            css/
            js/
        filemanager/
            css/
            js/
            userfiles/ (ha direktben kell elérni a file-okat)
                username_1/
                    images/
                    docs/
                username_2/
                    images/
                    docs/
                username_3/
                    images/
                    docs/

Logikusnak tűnik, ha erre gondoltál.
3

Igen, bár fordítva

erenon · 2009. Okt. 17. (Szo), 18.05
Igen erre gondoltam, csak fordítva :)
Szerintem egyéni ízlés megközelítése, hogy tematikusan, vagy modul szerint rendezzük mappába a fájlokat, ha neked ez áll kézre, használd így. Csak vigyázz, később lehet, hogy egy modul több controllert vagy modellt fog használni, és akkor nem lesz már ilyen egyszerű megtalálni a párját.
4

Ez mit is jelent pontosan?

s_volenszki · 2009. Okt. 17. (Szo), 18.49
Ez mit is jelent pontosan?

Azt értem, hogy egy modul több controller-t vagy model-t használ, azt azonban nem, hogy nehéz lesz megtalálni a párját.

Mire gondolsz pontosan?

Célszerű lenne a model-eket, view-kat és controller-eket egy-egy könyvtárban tárolni és nem modulonként? Valahogy így:
usr/
    models/
        ...ide összes model
    views/
        ..ide összes view
    controllers/
        ...ide összes controller
usr/
    htdocs/
        site/
            css/
            js/
        blog/
            css/
            js/
        filemanager/
            css/
            js/
            userfiles/ (ha direktben kell elérni a file-okat)
                username_1/
                    images/
                    docs/
                username_2/
                    images/
                    docs/
                username_3/
                    images/
                    docs/
5

pontatlan voltam

erenon · 2009. Okt. 17. (Szo), 18.56
Én így építem fel:

/
    modules/
        blog/
            models/
            views/
            controllers/
        site/
            models/
            views/
            controllers/
    public/
        downloads/
        static/
            css/
            js/
        index.php

De lényegében ugyan az az elgondolás, amit te használsz. Nem érvelnék egyik mellett sem, használd, amelyik kézreáll, vagy amelyiket logikusnak találod.
6

Jogos

s_volenszki · 2009. Okt. 17. (Szo), 23.07
Logikusnak tűnik, azt hiszem alkalmazom a javaslatodat egy két egyéni kiegészítéssel!

Köszönöm a segítségedet!