Какое проектирование приложений PHP / шаблоны разработки Вы используете?

Невозможно использовать RegEx, о котором я знаю, но вот наивный функциональный подход.

Сначала прокрутите строку и сравните каждый символ с двумя следующими символами, добавив +1 и +2 к текущему индексу и соответствующим образом сопоставлять.

Во-вторых, повторите цикл и сравните проверки следующих двух символов с текущим символом, чтобы увидеть, являются ли они последовательными.

Если обе петли не могут найти последовательные символы, функция возвращает true, в противном случае возвращает false.

Первые четыре возвращают false (fail), а последние три возвращают true (pass ).

function test(s) {
    // Check for sequential numerical characters
    for(var i in s) 
        if (+s[+i+1] == +s[i]+1 && 
            +s[+i+2] == +s[i]+2) return false;
    // Check for sequential alphabetical characters
    for(var i in s) 
        if (String.fromCharCode(s.charCodeAt(i)+1) == s[+i+1] && 
            String.fromCharCode(s.charCodeAt(i)+2) == s[+i+2]) return false;
    return true;
}

// For demo purposes only
var tests = [
    'efg123!$',
    'abcd567%',
    'xyz789^&',
    '#hijk23456',
    'ryiiu562@',
    'erty745#',
    'gjnfl45566^'
], sep = '\t\u2192 ', out = ['Fail','Pass'], eol = '<br>';
document.write('<pre>');
for(var i in tests) document.write(tests[i] + sep + out[+test(tests[i])] + eol);
document.write('</pre>');

39
задан Click Upvote 14 February 2009 в 13:01
поделиться

9 ответов

Я мог бы быть провален для этого, но если Вы действительно хотите записать свою собственную платформу, я говорю, идут для него, потому что Вы будете много учиться на опыте. Другие платформы, упомянутые здесь, являются большими и протестированы, и Вы не приняли бы плохое решение с помощью них, но это - выбор.

Прежде, чем начать писать Вашу платформу, посмотрите на другие платформы (в их синтаксисе, структуре каталогов, назвав схему, шаблоны разработки, и т.д.) и попытайтесь выяснить, почему они сделали то, что они сделали и что, во всяком случае, Вы сделаете по-другому. Испытайте несколько учебных руководств и играйте с их кодом, сделайте несколько демонстрационных приложений. Если после выполнения этого Вы не любите использовать их, то идете вперед и начинаете планировать свою платформу, сохраняя то, что работало и улучшение, что не сделало.

, Если бы Вы действительно решаете к самокрутке, вот несколько вещей, которые я рекомендовал бы на основе своего собственного опыта:

  • Делают безопасность Вашим Высшим приоритетом - Если Вы пишете уровень доступа к данным, используйте связанные параметры. Если Вы пишете класс формы, принимаете меры против CSRF и XSS. Поймайте свои исключения и обработайте Ваши ошибки. Удостоверьтесь, что Ваша среда PHP безопасна. Не пытайтесь придумать свой собственный алгоритм шифрования. Если Вы не концентрируетесь на безопасности, не стоит писать Вашу собственную платформу.
  • Комментарий Ваш Код - Вам будут нужны комментарии, чтобы помочь Вам помнить, как Ваш код работает через некоторое время. Я обычно нахожу, что комментарии docblock более чем достаточно. Кроме того, прокомментируйте, почему Вы сделали что-то, не, что Вы сделали. Если необходимо объяснить, что, можно хотеть осуществить рефакторинг.
  • Единственные Классы Ответственности и Методы - большинство Ваших классов и методов должны сделать одну вещь и только одну вещь. Особенно не упустите это с базой данных - Ваш класс разбиения на страницы не должен полагаться на Ваш объект доступа к данным, и при этом почти любой другой (низкий уровень) не должен классифицировать.
  • Модульный тест - Если каждый из Ваших методов делает только одну вещь, должно быть намного легче протестировать их, и это приведет к лучшему коду. Запишите тест сначала, затем код, чтобы пройти тест. Это также даст Вам большую свободу осуществить рефакторинг позже, не повреждая что-то.
  • Абстрактные Подобные Классы - Если у Вас есть больше чем один класс, который делает подобные вещи, создайте родительский класс, который использует общие черты между классами, и расширьте его.
  • Делегат и Строит из модулей - Если Вы пишете систему проверки (и возможности - Вы, вероятно, был бы), не включать каждый блок проверки допустимости как метод в некотором супер классе проверки. Разделите их на отдельные классы и назовите их по мере необходимости. Это может быть применено во многих областях: фильтры, языки, алгоритмы, блоки проверки допустимости, и так далее.
  • Защищают и Приватизируют - В большинстве случаев, лучше использовать методы получателя и методы установщика вместо того, чтобы предоставить прямой доступ к переменным класса.
  • Последовательный API - Если у Вас есть рендеринг () метод и ничья () метод, которые делают то же самое в различных классах, выберите один и пойдите с ним через все классы. Сохраните порядок параметров тем же для методов, которые используют те же параметры. Последовательным API является более легкий API.
  • Не забывают Автоматически загружаться - имена классов могут стать немного неуклюжими и длинными, но путь Пехлеви называет классы и организует каталоги, делает автозагрузку намного легче. Обновление : С PHP 5.3 необходимо начать использовать пространства имен.
  • Никогда эхо или печать что-либо - Дает его как возвращаемое значение и позволило пользователю решить, должно ли это быть отражено. Много времен Вы будете использовать возвращаемое значение в качестве параметра для другого метода.
  • не Пытаются Решить проблемы В мире - Решают Ваше собственное сначала. Если Вам не нужна функция прямо сейчас, как класс для локализации чисел или дат или валюты, не пишите это. Ожидайте, пока Вам не будет нужен он.
  • не Предварительно оптимизируют - Создают несколько простых приложений с Вашей платформой прежде, чем точно настроить его. Иначе можно провести много времени ни на чем продуктивном.
  • Управление исходным кодом Использования - при пребывании в течение бесчисленных часов, создавая шедевр не рискуйте им теряться.
70
ответ дан VirtuosiMedia 23 September 2019 в 17:20
поделиться

Я предполагаю, что много разработчиков PHP следовало за подобным маршрутом к моему: маленькие сценарии-> процедурный / встроенный код-> возможно взгляд на шаблонную обработку-> ООП-> затем платформа. Я думаю, что разработчику PHP может быть довольно свойственно "вырасти" с PHP, изучив шаблоны разработки для соответствия функциям, доступным текущей версии.

MVC является наиболее часто используемым шаблоном разработки в популярных платформах, используемых сегодня. CakePHP является моей предпочтительной платформой, хотя Симфония и Пехлеви очень популярен также †“, определенно стоит испытать некоторых, и это скоро станет очевидным, с которым Вы чувствуете себя больше всего комфортно.

Для большинства проектов (где быстрая разработка и портативный код являются приоритетами) я использую Пирог, однако для приложений легкого веса (один, я разработал, недавно был Хороший Baad), что Вы хотели бы работать быстро (на низких аппаратных средствах спецификации) и не нуждаетесь в объеме/весе, добавленном функциональностью одной из больших платформ, я рекомендую читать статью Rasmus Lerdorf о его Никакая Платформа платформа PHP MVC .

В основном, если Вы после истинного объектно-ориентированного языка, который поощряет красивый код и лучшие методы дизайна, PHP всегда собирается проиграть подобным Ruby Python и C#. Но, PHP имеет свои преимущества, например, никакую потребность в языке шаблонной обработки (это - одно), PHP может работать очень быстро и дешево и не нуждается в весе большой платформы для всех приложений.

я поощрил бы принимать шаблон разработки, который берет управляемость шаблона разработки как MVC, и объедините его с преимуществами PHP.

9
ответ дан Rudenoise 23 September 2019 в 17:20
поделиться

Я должен согласиться с вышеупомянутыми плакатами. Если Вы не используете платформу при программировании в PHP, Вы действительно программируете руками, связанными за спиной. Я лично рекомендую CodeIgniter. Это - самая быстрая платформа вокруг, это очень легко изучить и имеет очень активное сообщество. На все Ваши вопросы ответит платформа:

* How your folders are designed

CodeIgniter (или любая платформа в этом отношении) разделяет Вашу логику на представления, модели, и контроллеры, каждого с их собственной папкой.

* Do you have a standard way of dealing with CRUD, pagination, or any other common tasks?

Ки имеет библиотеку разбиения на страницы, и он имеет сторонние библиотеки как DataMapper для обертывания Ваших вызовов CRUD объектно-ориентированным способом (ORM).

* What are ways in which you can make your code more elegant?

разделение модели, представление и контроллер делают для очень изящного кода.

(Эти 2 вопроса я не ответил, в значительной степени подразумеваются при использовании платформы)

13
ответ дан ryeguy 23 September 2019 в 17:20
поделиться

я объяснил большую часть своей методологии PHP здесь .

, но в наше время, я просто использую Django везде, я могу.

2
ответ дан Community 23 September 2019 в 17:20
поделиться

Я использую Платформу Зенда, которая в значительной степени определяет расположение папки и ООП (парадигма MVC). Для общих задач такой что касается разбиения на страницы в качестве примера я использую Zend_Paginator (моя образцовая реализация классов Zend_Paginator_Adapter_Interface) для проверки, которую я использую Zend_Validate классы и т.д., Благодаря которым я могу полностью сконцентрироваться на бизнес-логике вместо изобретения велосипед.

2
ответ дан vartec 23 September 2019 в 17:20
поделиться

Я начал с присяжный острослов механизм шаблонной обработки, когда я сначала устал от смешивания кода и HTML. После взламывания некоторое время, я понял, что запись моей собственной платформы просто копирует работу.

я сделал несколько проектов с Joomla, который является действительно CMS, но он дает клиентам большой контроль содержанием.

В конечном счете я обосновался на использовании реальной платформы для моих проектов. Я использую симфония , который вдохновлен направляющими и очень хорошо документируется, но я услышал cakePHP и , ZendFramework также очень хорош.

2
ответ дан vishvananda 23 September 2019 в 17:20
поделиться

Используя Платформа Зенда и Доктрина , моя структура папок обычно похожа на это:

root
  app
    config         (db config, routing config, misc config)
    doctrine       (fixtures, migrations, generated stuff, etc)
    lib
    logs
    models         (doctrine models)
    modules        (zend mvc modules)
    bootstrap.php
  docs             (db diagrams, specs, coding standards, various docs)
  pub              (web root)
  tests
  tools            (console tools, i.e. doctrine-cli)
  vendor           (zend and doctrine libraries, preferably as svn-externals)
2
ответ дан Karsten 23 September 2019 в 17:20
поделиться

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

И затем прибывает часть, куда я прихожу к реализации того, делаю ли я что-то правильно.

И как таковой я разочаровался в записи моего собственного движения с фаворитом толпы: Пехлеви.

я посмотрел на других, но кажется, что Пехлеви был вокруг некоторое время, и они знают свои вещи.

MVC является также способом, которым я продвигаюсь с чем-либо, что я пишу теперь.

1
ответ дан Gautam 23 September 2019 в 17:20
поделиться

Я почти чувствую себя подобно побитому рекорду, но я рекомендовал бы смотреть на некоторые общие основы по двум причинам:

  1. , Даже если Вы принимаете решение не использовать один, некоторые из них очень хорошо записаны и очень хорошо разработаны. Мне особенно нравится Платформа Зенда, но я возвращусь к этому через секунду.
  2. Спрашивают себя, почему Вы изобретаете велосипед. Вы действительно чувствуете понимание тех же проблем проектирования, с которыми все остальные сталкиваются настолько лучше, чем сообщество позади (вставьте предпочтительную платформу здесь) выровнять по ширине запись чего-то с нуля? При разговоре, поскольку тот, кто первоначально посмотрел на несколько платформ и решил, что они были слишком большими, представил слишком много кривой обучения, или слишком много служебное и так разработало мое собственное, я могу сказать Вам, что запись Вашего собственного с нуля является большой болью, если можно просто использовать существующий, который может быть легко расширен.

Разговор об использовании платформы, которая может быть легко расширена, у меня был очень положительный опыт с Платформой Зенда. Это связно, и все же слабо связанная структура позволяет быстро и легко расширить любой существующий компонент, и вся платформа разработана на основе идеи, что необходимо будет записать собственному помощнику и сменным классам для добавления к ее полной функциональности.

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

Для ответа на некоторые вопросы я рекомендовал бы изучить Шаблоны Архитектуры приложений для предприятия Martin Fowler. Он обеспечивает большое ценное понимание того, как решить много этих типичных проблем как то, как создать слой взаимодействия базы данных в Вашем приложении. Fowler также затрагивает темы как Размещенный на первой полосе Контроллер и MVC.

8
ответ дан Noah Goodrich 23 September 2019 в 17:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: