Толпа. Контакт с низкими расположенными по приоритетам историями, которые представят [закрытое] изменение архитектуры

17
задан anthares 12 March 2010 в 22:20
поделиться

6 ответов

Потому что вы сказали:

сделано в одном из последних спринтов, возможно.

Я склонен согласиться с fuzzy lollipop (и +1 от меня).

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

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

7
ответ дан 30 November 2019 в 12:27
поделиться

У вас две проблемы в вашем коде.

Во-первых, строки в одинарных кавычках ( ') ведут себя иначе, чем строки в двойных кавычках ( "). При использовании строк в одинарных кавычках управляющие последовательности (кроме \ ' и \\ ) не интерпретируются, и переменные не расширяются. Это можно исправить как таковое (удаление кавычек или изменение их на двойные кавычки):

$string = 'hey';

foreach(range('a','z') as $i) {
  if($string == $i) {
    echo $i;
  }
}

Документация по PHP: Строки


Во-вторых, ваше условие никогда не будет оцениваться как ИСТИНА , поскольку 'эй' никогда не равно одной букве алфавита. Чтобы оценить, есть ли эта буква в слове, вы можете использовать strpos () :

$string = 'hey';

foreach(range('a','z') as $i) {
  if(strpos($string, $i) !== FALSE) {
    echo $i;
  }
}

! == FALSE важно в этом случае, поскольку 0 также оценивается как FALSE . Это означает, что если вы удалите ! == FALSE , ваш первый символ не будет выведен.

Документация PHP: strpos ()
Документация PHP: Преобразование в логическое
Документация PHP: Операторы сравнения

-1 21 --- 4109556-

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

9
ответ дан 30 November 2019 в 12:27
поделиться

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

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

3
ответ дан 30 November 2019 в 12:27
поделиться

Похоже, что это вопрос последнего ответственного момента.

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

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

С гибким, развязанным дизайном (например, разработанным с помощью TDD) можно поддерживать стоимость изменений относительно низкой.

4
ответ дан 30 November 2019 в 12:27
поделиться

Нет не очень уникальных.

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

-121--3702191-

Я занимаю второе место в рекомендации Dive Into Python. Но это в основном:

m = re.findall(r'\bf.*?\b', 'a fast and friendly dog')
print(m)

\b означает границу слова, и. *? гарантирует, что мы храним все слово, но отступаем, чтобы не заходить слишком далеко (технически,? называется ленивым оператором).

-121--2669327-

Проблема в том, что если эта история внесет огромное изменение в архитектуру нашего решения? Например, из автономного приложения, вам придется перейти к архитектуре клиент-сервер, только из-за этой истории.

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

  • Если история не важна и рискованна, она, скорее всего, никогда не будет реализована.
  • Если история важна и рискованна, то она, скорее всего, не настолько низкоприоритетна (т.е. неправильно расставлена по приоритетам).
6
ответ дан 30 November 2019 в 12:27
поделиться

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

Фактически, вы можете получить доступ к нестатическому члену в статическом контексте, указав ссылку на объект явно:

class HelloWorld {
   int i;
   public HelloWorld(int i) { this.i = i; }
   public static void Print(HelloWorld instance) {
      Console.WriteLine(instance.i);
   }
}

var test = new HelloWorld(1);
var test2 = new HelloWorld(2);
HelloWorld.Print(test);

Без явной ссылки на экземпляр в методе Печать , как бы он знал, что он должен печатать 1, а не 2?

-121--2451616-

Статические функции могут использовать только статические членов и вызывать статические функции.

Как уже упоминалось, статическая функция может работать над экземпляром класса, но не от в экземпляре класса (из-за отсутствия более описательного слова). Например:

class MyClass
{
    public int x;
    public static int y;

    public static void TestFunc()
    {
        x = 5; // Invalid, because there is no 'this' context here
        y = 5; // Valid, because y is not associated with an object instance
    }

    public static void TestFunc2(MyClass instance)
    {
        instance.x = 5; // Valid
        instance.y = 5; // Invalid in C# (valid w/ a warning in VB.NET)
    }
}
-121--2451619-

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

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

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

2
ответ дан 30 November 2019 в 12:27
поделиться
Другие вопросы по тегам:

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