Лучшие практики - Дизайн прежде, чем кодировать [закрытый]

Ничего не видно. Страница пуста и белая.

Также известна как Белая страница смерти или Белый экран смерти . Это происходит, когда отчет об ошибках отключен, и произошла фатальная ошибка (часто синтаксическая ошибка).

Если вы включили протоколирование ошибок, вы найдете конкретное сообщение об ошибке в своем журнале ошибок. Обычно это будет в файле php_errors.log, либо в центральном месте (например, /var/log/apache2 во многих средах Linux), либо в самом каталоге самого скрипта (иногда используется в среде совместного размещения).

Иногда может быть более простым временно отображать ошибки. На белой странице отобразится сообщение об ошибке. Будьте осторожны, потому что эти ошибки видны всем, кто посещает веб-сайт.

Это легко сделать, добавив в начале скрипта следующий код PHP:

ini_set('display_errors', 1); error_reporting(~0);

Код включит отображение ошибок и установит отчетность на самый высокий уровень.

Поскольку во время выполнения ini_set() он не влияет на синтаксические ошибки синтаксиса. Эти ошибки появятся в журнале. Если вы хотите также отобразить их на выходе (например, в браузере), вам необходимо установить директиву display_startup_errors на true. Сделайте это либо в php.ini, либо в .htaccess или любом другом методе, который влияет на конфигурацию перед временем выполнения .

Вы можете использовать те же методы для установки параметра log_errors и error_log , чтобы выбрать ваше собственное место в файле журнала.

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

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

Связанные ошибки:

41
задан Mat 4 November 2011 в 11:59
поделиться

11 ответов

Я обычно делаю достаточно анализа проблемной области на бумаге/белой доске, чтобы заставить достаточно хорошее понимание проблемной области запускать написание кода. Я редко привлекаю реализацию или диаграммы классов на бумаге. Ключевая техника, которую я нашел для достижения лучшего дизайна, не должна быть слишком присоединена к коду, который Вы пишете. Если мне не нравится он, я удаляю, переименовываю, перемещаю и переставляю его вокруг, пока это не выражает достаточно хорошего решения того, что я пытаюсь решить. Легкие звуки? Нисколько! Но с хорошими инструментами "кодирования", на самом деле пишущий код не серьезное усилие. Запишите некоторым, осуществите рефакторинг, удалите, запишите снова...

Хороший дизайн почти никогда не начинаются хороший. Это развивается к пользе. Принятие это помогает работать в небольших шагах, не будучи разбитым, почему дизайн не "прекрасен". Для этого процесса для работы у Вас есть отрядам хорошие навыки проектирования все же. Точка быть, даже превосходные разработчики не добираются, это исправляется в первый раз.

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

Это - очень итеративные процессы.

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

31
ответ дан Kim Major 27 November 2019 в 00:47
поделиться

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

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

, Даже если я провожу много времени для продумывания дизайна очень тщательно, я ВСЕГДА заканчиваю тем, что изменил его, когда я иду. Таким образом, это хорошо, имеют в виду, что Ваш дизайн изменится, поскольку Вы принимаете решение о том, как зарегистрировать Ваш дизайн.

6
ответ дан Ola Eldøy 27 November 2019 в 00:47
поделиться

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

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

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

другая часть находится главным образом на белой доске. Компактный цифровой фотоаппарат является стандартным оборудованием в эти дни.

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

См.:

5
ответ дан Stephan Eggermont 27 November 2019 в 00:47
поделиться

Это должен быть баланс.

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

, Если Вы начинаете взламывать далеко в некоторой небольшой части системы, Вы будете, вероятно, терять из виду "большое изображение" и заканчивать с плохим дизайном.

, Поскольку Вы смотрите на библиотеки, Вы хотите, чтобы они были допускающими повторное использование как можно больше. Таким образом для начального дизайна, думайте о наиболее общих случаях, Вы можете среди надлежащих использований Вашей библиотеки, Вы уже знаете, что [приблизительно 110] - не волнуются слишком много на данном этапе о гипотетическом будущем использовании, которого никогда не могло бы хорошо происходить. Кодируйте, что дизайн с модульными тестами и осуществляет рефакторинг, как Вы узнаете больше и находите проблемы с дизайном.

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

4
ответ дан Paul Stephenson 27 November 2019 в 00:47
поделиться

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

Тогда я начинаю кодировать, и каждый раз, когда I вещей являются сложными (потому что что-то не находится в правильном месте), я осуществляю рефакторинг. Переместите один класс в другой пакет или извлеките метод, и т.д. и т.д., Когда "дизайн" чувствует прямо тогда, что я могу идти дальше.

Этот способ, которым я избегаю "аналитического паралича", которые используют для случая со мной довольно много. Много раз, когда я по разработанному, первичному, я заканчивал тем, что не использовал некоторые артефакты.

Таким образом я проявил этот более "гибкий" подход.

Эскиз дизайн очень быстро и "совершенствовали" (путем рефакторинга) в выполнении.

, Конечно, это возможно для небольших приложений (2 - 4 недели длиной)

, я предложил бы, чтобы Вы взяли чтение к этой статье: дизайн, мертвый от Martin Fowler. Это немного длинно, но стоит считать.

РЕДАКТИРОВАНИЕ

Дополнительная ссылка (немного offtopic) , Как разработать хороший API и почему это имеет значение Joshua Bloch. Разговор об уместности дизайна, когда у Вас есть аудитория для Вашего API. Сводка, запустите максимально частный и выращивание оттуда.

4
ответ дан OscarRyz 27 November 2019 в 00:47
поделиться

Я следую за очень свободной версией Рационального Объединенного Процесса.

Первый запуск с документом видения, который четко дает понять то, что Вы пытаетесь сделать, кто Ваш делает его для и возможно некоторый ключ детализирует о предложенных методах/алгоритмах. Это не должно быть необычно и могло даже быть одним лайнером для простой системы "Система для предсказания лотерейных номеров победы, для персонального использования только, на основе последнего исследования из школы Хогвартса". для более сложной системы это могли быть приблизительно пять страниц, но не больше. Это не дизайн, но больше как список пожеланий.

Затем делают некоторые случаи/истории использования. Они должны быть простыми текстовыми описаниями естественного языка всех взаимодействий с внешним миром. Минимализм является ключом здесь; цель вариантов использования состоит в том, чтобы определить всю необходимую функциональность и только необходимую функциональность. Также я нахожу, что это - то, где большая часть креативности происходит.

вариант использования А мог бы запуститься как:

  User presses the "magic" button.
  System displays next weeks winning number.
  User writes down number.
  User buys lottery ticket.
  Lottery draws winning number.
  User claims money
  lottery pays up.

После того, как много работы вокруг этого заканчивается as:-

  User presses "magic" button
  System selects next weeks numbers.
  System logs on to lottery system.
  System enters winning numbers.
  Lottery selects winning numbers.
  Lottery transfers winnings to users account.
  User spends money.

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

4
ответ дан Iterator 27 November 2019 в 00:47
поделиться

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

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

Как я говорю, не ответ.

3
ответ дан navitronic 27 November 2019 в 00:47
поделиться

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

, поскольку Вы неизбежно плохо знакомы с системой свое создание, Вы - дизайн, и код не будут прекрасными в первый раз вокруг, таким образом, Вы повторяете дизайн & осуществите рефакторинг код до его готового.

2
ответ дан Robert Gould 27 November 2019 в 00:47
поделиться

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

Оттуда, мне нравится идти с в основном DDD (Доменный Управляемый Дизайн) подход. Интервьюирование бизнес-пользователей, в случае необходимости, для построения модели предметной области. Однажды модель предметной области и последующий DAL (Уровень доступа к данным) заботится о, я перемещаюсь в слой бизнес-логики (BLL).

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

1
ответ дан Joseph Ferris 27 November 2019 в 00:47
поделиться

Нерешенный вопрос. Будет почти, столько же отвечает сколько плакаты. 1) взгляните на многие книги по разработке программного обеспечения. Некоторые спорят с хорошим дизайном, остальное - защелка. Это - прямая ложь, 2) Видят, как навязчивые разнообразные Платформы, лучше необходимо использовать их намеченный путь иначе, Вы лучше реализуете материал снова для Ваших потребностей 3), для Дизайна было бы нужно постоянно изменение как любая запись. Вы видите предложения, но Вы чувствуете, что они не соответствуют полностью. Таким образом, Вы переписываете его. Таким образом, каждый дизайн должен принять во внимание, что вещи отличаются, поскольку они кажутся, поскольку Вы записали дизайн.

Friedrich

Отношений
0
ответ дан Friedrich 27 November 2019 в 00:47
поделиться

При выполнении любых главных проектов как разработка игр я склонен пытаться тщательно структурировать свой код и сделать нефункциональные фиктивные функции и классы с самого начала. Из Основного файла кода я разделил все на классы в других модулях и подмодулях при необходимости. Например; Моя основная кодовая страница состояла бы из не чего иного как включает и звонит в инициализаторы класса для моих основных модулей. Вот пример init.py для игры, которую я делаю в Python прямо сейчас;

от commonheaders импортируют *

if arguements.debug:
    debug.init()

try:
    graphics.init()
    sound.init()
    physics.init()
    input.init()
    loop.start("scene1")
except Exception, e:
    print "Error!"
    print e

, Это очень минимально и легко понять, но что я люблю больше всего об этом, то, что это дает очень определенное разделение между различные основные аспекты кода. Если я расстроен чем-то в графическом классе, я могу просто пойти работа в звуковом классе или чем-то еще, чтобы сделать другой материал и сохранить графику не в своем уме некоторое время до облачной передачи. На всем классе init () вызовы там являются дополнительным arguements, таким как widht/height для графики, но я обычно оставляю их из там и или набор их в commonheaders.py файле или через переключатели командной строки.

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

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

0
ответ дан Stephen Belanger 27 November 2019 в 00:47
поделиться
Другие вопросы по тегам:

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