Как Вы боретесь со сложностью дизайна? [закрытый]

Вы можете использовать глобальную переменную PHP

Вы можете использовать глобальную переменную PHP [111] для захвата данных, если вы не уверены в типе запроса, подобном этому,

public function matused()
    {
        $id = 

Вы можете использовать глобальную переменную PHP

Вы можете использовать глобальную переменную PHP [111] для захвата данных, если вы не уверены в типе запроса, подобном этому,

[110]REQUEST для захвата данных, если вы не уверены в типе запроса, подобном этому,

[110]REQUEST['id']; $data['rd'] = $this->Model_joborder->tampil2($id); $data['fb'] = $this->Model_joborder->data_cbb(); $this->load->view('matused', $data); }
REQUEST
для захвата данных, если вы не уверены в типе запроса, подобном этому,

[110]
8
задан Aziz Shaikh 23 November 2012 в 12:09
поделиться

14 ответов

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

Почему сборка что-то простое и эффективное, когда это может быть сложно и замечательно?

Попытайтесь напомнить людям правила XP создания самой простой вещи, которая может возможно работать.

12
ответ дан 5 December 2019 в 04:55
поделиться

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

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

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

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

4
ответ дан 5 December 2019 в 04:55
поделиться

Удостоверьтесь, что возвратили любые идеи, которые Вы имеете прочь кого-то еще. Часто, мы становимся так обернутыми в выполнении вещей определенный путь, что оно берет другую пару глаз для установки Вас право. Много раз были, что я выяснил трудные проблемы при наличии кого-то еще там, чтобы сказать, что "нам действительно нужно это?" Это помогает сделать мой код более простым.

На точке контакта с людьми Вы не соглашаетесь с, у Ward Cunningham есть положительная сторона:

Это был поворотный момент в моей карьере программирования, когда я понял, что не должен был выигрывать каждый спор. Я говорил бы о коде с кем-то, и я скажу, "Я думаю, что лучшим способом сделать это является A.". И они сказали бы, "Я думаю, что лучшим способом сделать это является B. Я сказал бы, "Хорошо не, это действительно A.". И они сказали бы, "Ну, мы хотим сделать B.". Это был поворотный момент для меня, когда я мог сказать, "Прекрасный. Сделайте B. Это не собирается причинять нам боль так очень, если я неправ. Это не собирается причинять нам боль так очень, если я прав, и Вы делаете B, потому что, мы можем исправить ошибки. Так позволяет, узнают, является ли это ошибка.... Обычно это оказывается C. Это - полезный опыт для нас обоих. Если мы решаем без опыта, ни один из нас действительно не учится. Ward победил, и кто-то еще не сделал. Или наоборот. Это - слишком много сражения. Для почему бы не высказывания, "Ну, позвольте нам просто кодировать его и видеть то, что происходит. Если это не будет работать, то мы изменим его "".

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

6
ответ дан 5 December 2019 в 04:55
поделиться

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

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

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

В этом случае несколько вещей могут продолжаться. Один из них, Вы могли бы быть неправыми, и эти люди могли действительно знать то, что они говорят, потому что они работали с очень похожими примерами. Другой, они могли бы быть неправыми, т.е. их дизайн не предлагает преимуществ скорости, которых они требуют. В этом случае могло быть две различных ситуации: (1) Они дают скорости слишком много веса в своем дизайне, или (2) скорость является действительно критической. Если скорость действительно так релевантна, команда не должна полагаться только в предположениях - они должны попробовать различные прототипы и оценить их скорость в критических путях. Вы не создаете автомобиль F1 одним способом просто, "потому что это быстрее", вместо этого Вы продолжаете пробовать несколько альтернативных конструктивных решений и выбираете самое быстрое, которое все еще не увеличивает затраты на обслуживание слишком много.

Иногда можно обсудить это и достигнуть соглашения, иногда Вы не можете. Это - жизнь.

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

3
ответ дан 5 December 2019 в 04:55
поделиться

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

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

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

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

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

"Твердые мнения, слегка сохраненные", должны быть Вашим девизом.

Иногда техническая точка не стоит отчуждать Вашу всю команду. Иногда это. Ваш вызов.

2
ответ дан 5 December 2019 в 04:55
поделиться

Вы боретесь с чужим сверхдизайном/излишним усложнением несколькими способами:

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

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

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

2
ответ дан 5 December 2019 в 04:55
поделиться

Лучшим способом я нашел, должен постоянно спрашивать - снова и снова - 'Что является бизнес-проблемой, которую мы пытаемся решить' и, 'Как делает эту справку решения для решения той проблемы'.

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

Таким образом в Вашем примере того, как организовать базу данных, мой вопрос был бы, 'Что делает мы думаем, требования транзакции для этого проекта сегодня, в следующем месяце, в следующем году, пять лет с этого времени'. Могло случиться так, что имеет смысл проводить много времени для разбираний в модели данных, это могла быть пустая трата времени. Вы не знаете то, что - параметры, пока Вы не объясняете проблемное определение.

2
ответ дан 5 December 2019 в 04:55
поделиться

Можно страдать от "слишком многих архитекторов в команде" синдромом. Один или два человека самое большее должны разрабатывать/проектировать систему, которая будет кодирована командой 5 - 10 человек. Вход приветствуется от всех, но архитектурные лица, принимающие решения, должны быть немногими и опытный.

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

1
ответ дан 5 December 2019 в 04:55
поделиться

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

0
ответ дан 5 December 2019 в 04:55
поделиться

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

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

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

0
ответ дан 5 December 2019 в 04:55
поделиться

Решение должно быть не более сложным, чем проблема.

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

0
ответ дан 5 December 2019 в 04:55
поделиться

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

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

0
ответ дан 5 December 2019 в 04:55
поделиться

Не пытайтесь сделать все подряд. Повредите каждую проблему/задачу в управляемые блоки. Затем расположите по приоритетам, имея в виду KISS и YAGNI. Это поможет Вам сфокусировать на создании, в чем Вы нуждаетесь. Если Вы сделали его правильно, у Вас будет хорошее ядро, к которому можно добавить позже, учитывая время, деньги, ресурсы и вдохновение.

0
ответ дан 5 December 2019 в 04:55
поделиться

I have seen this formula somewhere:

skill = complexity of problem / complexity of solution http://img39.imageshack.us/img39/1586/whatisskill.png

In other words, it requires skill to create a simple solution to a complex problem. If somebody purposefully designs and takes pride in complex overengineered solutions, then he is unconsciously incompetent.

Personally, what helps me to keep my designs simple, is the TDD cycle. First write a test that specifies what you're trying to reach, and then produce "the simplest thing that could possibly work". And every now and then, reflect on what you have produced, and think about how to make it more simple.

Never build extra flexibility and abstraction layers into the system, until it is required by something that you have now. Changing the code is easy, when you have a good unit test suite, so you can add those abstraction layers later, when the need arises, if it ever arises. Otherwise, "you ain't gonna need it".

Some symptoms of too complex design are when writing tests is complicated. If the tests require a long setup code, maybe you have too many dependencies or in some other way too much complexity. If you run into concurrency bugs, then maybe you should think about how to design the system so that concurrency is restricted to the absolute minimum number of classes. Maybe use a message-passing architecture, such as the Actor model, and make practically every component single-threaded, even though the system as a whole is multi-threaded.

6
ответ дан 5 December 2019 в 04:55
поделиться
Другие вопросы по тегам:

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