Помогите определиться с файловой структурой

Nelius

кипарис во дворе
Помогите определиться с файловой структурой

В общем задача которая возникает практически у всех кто хоть раз делал что-то свое.
При прочтении форума основной мыслью в этом направлении было "удобство это индивидуально, делай так как тебе будет удобно самому".
С этим полностью согласен.
Но проект мой OpenSource и будет выложен в общий доступ, хотелось бы услышать мнения о структуре которую я выбрал и советы, чтобы в итоге получить некую золотую середину.

CMS которая разрабатывается, построена на основе фрэймворка. Текущая её файловая структура такова:

apps/ - приложения
---my_CMS_name/ - название приложения
------cache/ - тут храню кэш, если данные храняться в файлах а не в памяти
---------frontend/ - кэш морды
---------backend/ - кэш админки
------config/ - конфиг
------i18n/ - данные интернациолизации и локализации приложения
---------frontend/
---------backend/
------lib/ - библиотеки и модули, например библиотека функций которую я написал, phpMailer и др.
------modules/ - все модули приложения тут
---------module_name/ - название модуля
------------controller/ - контроллеры модуля
------------model/ - модели
------------view/ - вид
------resources/ - различные ресурсы, например я тут храню шрифты для капчи
framework/ - вместо слова framework тут название фрэймворка, просто пока не разглашаю
www/ - Это торчит во вне =) Единственное что доступно из внешнего мира)
---_install/ - тут инстал скрипт, директория удаляется после установки системы
---images/ - картинки которые закачиваются через админку (например при добавлении новости)
---js/ - весь яваскипт храню тут
---templates/ - шаблоны
------frontend/ - для морды
---------template_name/ - название шаблона
------------images/ - картинки шаблона тут
------backend/ - для админки
---------template_name/
------------images/
---uploads/ - загруженные файлы

Насколько удобна такая структура и где ее можно упростить, учучшить?

Часто встречается вместо:
------modules/
---------module_name/
------------controller/
------------model/
------------view/

вот так делают:
------controllers/
------models/
------views/

Как лучше на Ваш взгляд?
Заранее спасибо.
 

Garret

Кто здесь?
Все вполне нормально. А мелочи, то уже на вкус и цвет...
 

MiksIr

miksir@home:~$
На практике большинство опенсорсов стараются не выходить "вверх" за папку, доступную по www. Сложно сказать почему.. возможно бывают такие случаи, когда на хостинге пользователю дают доступ только к ней, а не выше. Ну и облегчает процесс инсталяции, ибо папочка www на разных хостингах назвается по-разному.
Но это актуально, если результатом будет конечный продукт "залил на хостинг, запустил инсталятор и работаем".
 

Nelius

кипарис во дворе
Спасибо!

HraKK
Да, мне почему-то тоже кажется что так понятней.
Просто когда валяются кучи файлов в папках controllers, models, views мне кажется это менее структурированным и понятным. Хотя наверное опять же дело вкуса.

Garret
Спасибо!)

Главное для меня еще также определить насколько это просто для понимания человеком решившим просто скачать и установить CMS, будем считать что он не профессионал а просто знаком с основами веб-разработки и настройки апача и пхп.
Практика показывает что чем проще установить и настроить систему, тем больше ее популярность.
А популярность важна для развития проекта в целом.
Прошу оценить и с этой точки зрения тоже :)

-~{}~ 09.09.08 18:45:

MiksIr
Полностью согласен!!! Вот поэтому и спрашиваю.
Та структура которую я выбрал более защищена и логична на мой взгляд по сравнению со структурой когда все хранится скопом в папке www. Но она более сложная... как найти компромис.... :)))

-~{}~ 09.09.08 19:29:

Ну в общем задумывается как готовый продукт Download-Install-Use.
Например, рассмотрим процесс установки Вордпресс: (инструкцию укоротил немного)

1. Скачайте и распакуйте дистрибутив WordPress.
2. Создайте базу данных для WordPress на вашем веб-сервере.
3. Переименуйте файл wp-config-sample.php файл в wp-config.php.
4. Откройте wp-config.php в вашем любимом текстовом редакторе и впишите в него настройки подключения к базе данных.
5. Разместите файлы WordPress на вашем веб-сервере:
Если вы хотите установить WordPress в корень вашего сайта (например, http://example.com/), перенесите все содержимое предварительно распакованного дистрибутива WordPress в корневую папку веб-сервера.
6. Перейдите по ссылке wp-admin/install.php. Если вы установили WordPress в корень веб-сервера, перейдите по ссылке: http://example.com/wp-admin/install.php

Вот и все! Если вы сделали все правильно - установка WordPress должна была увенчаться успехом.

Для моей системы это будет выглядеть так:

1. Скачайте и распакуйте дистрибутив NewCMS.
2. Создайте базу данных для NewCMS на вашем веб-сервере.
3. Разместите файлы NewCMS на вашем веб-сервере: Перенесите все содержимое папки www в корневую папку веб-сервера.
Перенесите папки apps и framework в папку которая находится на уровень выше корневой папки веб-сервера.
4. Откройте config/config.xml в вашем любимом текстовом редакторе и впишите в него настройки подключения к базе данных.
5. Перейдите по ссылке http://ваш_сайт.ru/install/ далее следуйте инструкциям инсталлера.

Впринципе ненамного сложнее, если у чувака на хостинге есть возможность "гулять" за пределами папки www.
Но даже если он установил все успешно и юзает. Не будет ли ему потом сложно разбираться что где лежит?
Хотя профессионал разберется я думаю, а обычному юзеру чаще всего нужно только поменять дизайн и установить плагины, а это довольно тривиально делается и лежит все в www (шаблоны я имею ввиду).
 

Gas

может по одной?
Nelius
так зачем требовать выше уровня document root если почти во всех проектах есть ЧПУ на основе mod_rewrite (или подобных фич если не апач) и можно закрыть доступ с помощью него.

Что касается файловой структуры - всё наглядно и понятно, только немного смущает наличие папок templates внутри www.
 

Nelius

кипарис во дворе
Gas
Да согласен, у меня все закрыто через .htaccess так что даже если положить все в www доступа к чему не нужно не будет.
Папка templates внутри www потому что картинки и css должны быть доступны + в шаблонах сейчас не используется пхп код так что если даже юзер угадает как они называются, то получит обычный хтмл.
 

Alexandre

PHPПенсионер
вполне адекватная структура, у меня например в папочке htdocs (у каждого свое название) только те файлы, к которым есть доступ из www, из пхп файлов - index.php и ajax.php (ну аяксовских скриптов может быть естественно больше, хотя тоже можно исмользовать структуру МВС)все остальные файлы (конфиг, темлайты, пхп-скрипты) вынесены за пределы www видимости
 

Nelius

кипарис во дворе
Спасибо всем за мнения и советы. Думаю оставлю такую структуру. Не смотря на то что это может создать дополнительные сложности при установке. :)
 

Sluggard

Новичок
Да согласен, у меня все закрыто через .htaccess так что даже если положить все в www доступа к чему не нужно не будет.
в шаблонах сейчас не используется пхп код так что если даже юзер угадает как они называются, то получит обычный хтмл.
Вроде и доступ закрыт, куда не нужно, но вроде и имена файлов можно угадывать. Вроде фреймверк популярный собрался писать, но вроде и каша в голове не утряслась. :)

Папка templates внутри www потому что картинки и css должны быть доступны
Угу. Это же так логично следует из:
www/ - Это торчит во вне =) Единственное что доступно из внешнего мира)
---images/ - картинки которые закачиваются через админку (например при добавлении новости)
---js/ - весь яваскипт храню тут
---templates/ - шаблоны
Кстати, для css папочку не забудь.

Просто когда валяются кучи файлов в папках controllers, models, views мне кажется это менее структурированным и понятным.
Быть может есть смысл иметь оба варианта и дать разработчику выбор? Не редко модуль имеет по одному контроллеру и по одной модели. Постоянно разворачивать и сворачивать папки с одиночными файлами - тоже не есть гуд. Например, ты пишешь игровой портал и часто переключаешься от модуля к модулю, дописывая метод/экшн (еще что...). В таком случае лучше хранить все скопом, а более менее отлаженные блоки выделять в модули.
 

HraKK

Мудак
Команда форума
Sluggard
Например, ты пишешь игровой портал и часто переключаешься от модуля к модулю, дописывая метод/экшн (еще что...).
Вот именно тут то тебе и прикодится разграничитель modules/controller чтоб не тратить время на остысливание контроллер это или модель
 

Sluggard

Новичок
HraKK
Скопом - имелось в виду так:
------controllers/
------models/
------views/
все контроллеры в одной папке, модели в другой...

более менее отлаженные блоки выделять в модули = приводить к структуре:
------modules/
---------module_name/
------------controller/
------------model/
------------view/
 

Nelius

кипарис во дворе
Sluggard
Да, каша в голове присутствует, но со временем все структурируется и утрясется. Пока еще знаний не хватает, но я изучаю, изучаю...

За подсказку спасибо. Наверное имеет смысл сделать 2 варианта. Только надо тогда в документации этот момент обязательно оговорить, чтоб юзер не путался и не пугался обилия директорий.
 

iSlayter

Новичок
------modules/
---------module_name/
------------controller/
------------model/
------------view/
Мне такая структура не нравится. У себя Все контроллеры \ модули храню в папке controllers. Все модели в папке models. В папке views - frontend и backend + static. Всё. Так - удобнее, имхо.
 

HraKK

Мудак
Команда форума
Переезжаем в оффтопик.

iSlayter
У меня сейчас в cms 40 контроллеров, а будет _значительно_ больше, ты предлагаешь их всех скопом хранить? Еще и наверно namespace вводить module_default.php?
 

Nelius

кипарис во дворе
iSlayter
HraKK дело говорит. Я тоже плохо представляю себе как работать с когда все в одной папке при увеличении числа модулей. Но я пока думаю по поводу того что посоветовали про 2 стандарта, чтоб был выбор.
 

Nelius

кипарис во дворе
HraKK
Спасибо, autoload уже есть :) Без него было бы совсем грустно.)
 

pilot911

Новичок
а зачем бэкенду кэш ?

кэш должен быть один - из бэкенда там максимум что будет браться - так это кэшированные выборки

-~{}~ 16.09.08 07:45:

Часто встречается вместо:
------modules/
---------module_name/
------------controller/
------------model/
------------view/

вот так делают:
------controllers/
------models/
------views/


второй вариант удобнее по той причине, что не приходится кликать на папки, раскрывать/закрывать их из-за большой высоты списков
 

HraKK

Мудак
Команда форума
капец. а изза того что в 1 папке 100 файлов, это конечно облегчает поиск нужного.
 
Сверху