Типы хранения кода

Приветствуем!

Хотите что-то написать?

Нужно назвать себя.

Если вы пришли в первый раз,
то нужно зарегистрироваться.

Читайте нас в:

Блог на ya.ru
Блог на Деловом квартале
Блог на Twitter.om
Блог на Livejournal.com
11 января

РазработкаТипы хранения кода

Казалось, ну какая разница как вы будете хранить свои файлы, в которых расположен ваш код? Ещё во времена php4 код хранился - as is, редко когда видел достойную иерархию - всё вызывалось через require и сродные ему функции. Но постепенно автозагрузка дала повод задуматься. Итак, немного о типах хранения кода вашего приложения.


Вариант 1: As Is или Messup

Происходит это, когда функции автозагрузки не уделяется должного внимания. В итоге в коде виднеются require_once, а сами файлы расположены чёрти как, имена файлов никак не связаны с именами классов, часть каталогов лежит структурировано, часть файлов прям на поверхности. Такое ещё можно найти даже в "opensource" решениях.

Плюсы: думать о расположении файлов не нужно

Минусы: Цепочки вложений начнут переплетаться и путаться, большое приложение будет весьма трудно разобрать по косточкам и найти нужный кусок кода будет просто нереально


Вариант 2: CamelCase

При данном типе структуры все файлы группируются в каталоге по назначению. Вложенность редко доходит до второго уровня. Иерархия выражается в именах файлов, которые записываются в виде CamelCase. Например:

template
  TemplateBase.php  
  SimpleTemplateBase.php
model
  ModelBase.php
  SimpleModelBase.php

В данном случае имеем 2 основных назначения - template и model. *Base - это базовые файлы, Simple* - производные от базовых.

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

Минусы: Автозагрузка для подобной структуры будет непростой. Изначально неизвестно точное расположение файла, поэтому, скорей всего, придётся пробегаться по всем и составлять список для автозагрузки.


Вариант 3: Древовидная (Underscore)

Да да, код можно хранить и в виде дерева. Разделение так же можно реализовать по назначению. Имела файлов - ёмкие и краткие, чего, конечно, не всегда можно сказать про имена классов. Вот вам пример:

Template
  Extended
    Smarty.php (класс Template_Extended_Smarty)
    Php.php (класс Template_Extended_Php)
  Base.php (класс Template_Base)
  Simple.php (класс Template_Simple)
Model
  Extended
    Mysql.php (класс Model_Extended_Mysql)
    Oracle.php (класс Model_Extended_Oracle)
  Base.php (класс Model_Base)
  Simple.php (класс Model_Simple)

Путь для класса очень прост - знаки подчёркивания заменяются на слеши

Плюсы: Простейшая автозагрузка. Всё что нужно автозагрузчику - список директорий (имеются в виде те, которые на уровень выше Template и Model в нашем случае). Возможность создавать ёмкие, но понятные иерархии зависимостей. Объединять различные назначения классов в дереве несколько проще

Минусы: Труден в рефакторинге - перемещение файлов весьма тяжёлый процесс как минимум. Иерархия требует внимательно подхода, иначе вы можете сами же себя и запутать. Вложенность может привести к весьма огромным именам классов, с этим тоже нужно быть внимательным.

Но самое главное - используйте ту иерархию, которую вам предлагает фреймворк и всё у вас получится.

Удачных разработок!

Тэги: php, иерархия кода, разработка

Коментарии:

amikhailov 2009-01-12 10:23:31

Дадада!
Третий вариант (самый удобный, имхо) уже 4 века назад сделан в ZF, и два века назад в Doctrine и Solar. В симфони, ЕМНИП, это не так.

Кстати, почему в этом блоге не работает при авторизации кнопка "Запомнить меня"?

ответить
maddogg 2009-01-12 12:57:03

оно работает, проблемы с дропом сессии sf, не решили до конца

ответить

Свой комментарий: