Отметьте в Python 2.6 + и Py3K, %f символ ловит микросекунды.
>>> datetime.datetime.strptime("2008-09-03T20:56:35.450686Z", "%Y-%m-%dT%H:%M:%S.%fZ")
Посмотрите выпуск здесь
На одном конце спектра находятся сторонники Agile, которые настаивают на том, что все может быть выполнено с помощью рефакторинга позже. На другом конце - толпа олдскульных «Big-Design-Up-Front», которые думают, что вы должны сначала построить полную архитектуру, а затем привязать к ней функции. Ваш вопрос идеален, потому что он вскрывает недостатки обеих философий, если вы бездумно следите за их процессами. Вам нужна максимальная эффективность. Итак, вам нужно проанализировать, что такое история 1 и история 2 в вашей ситуации. Можно ли поставлять ваше программное обеспечение без S2 или вы просто разделили истории, чтобы помочь с оценкой и планированием? Если S1 - это «Добавить в корзину», а S2 - «Оплата», глупо не создавать интерфейс для поддержки S2, потому что без него ваше программное обеспечение бесполезно. В каждом проекте есть определенный набор известных «обязательных» функций, которые делают ваше программное обеспечение даже достойным поставки. Если обе ваши истории относятся к этому набору, то я бы посоветовал создать интерфейс для поддержки обоих сейчас и не тратить время на рефакторинг позже (# 3).
Обычно, если оба S1 и S2 входят в обязательный набор, они будут вместе в Бэклоге. Если это не так, то либо у вас есть огромное количество того, что необходимо, и ваш проект не получит такого большого преимущества при использовании методов Agile, либо S2 действительно не обязательно. Так что, если вы ожидаете, что между обязательствами по S1 и S2 пройдет много времени (месяцев?), То я бы выбрал интерфейс с 1 параметром. Время всегда вносит огромный вклад в неопределенность.
Если обе ваши истории относятся к этому набору, то я бы посоветовал создать интерфейс для поддержки обоих сейчас и не тратить время на рефакторинг позже (# 3).Обычно, если оба S1 и S2 входят в обязательный набор, они будут вместе в Бэклоге. Если это не так, то либо у вас есть огромное количество того, что необходимо, и ваш проект не получит такого большого преимущества при использовании методов Agile, либо S2 действительно не обязательно. Так что, если вы ожидаете, что между приверженностью S1 и S2 пройдет много времени (месяцев?), То я бы выбрал интерфейс с 1 параметром. Время всегда вносит огромный вклад в неопределенность.
Если обе ваши истории относятся к этому набору, то я бы посоветовал создать интерфейс для поддержки обоих сейчас и не тратить время на рефакторинг позже (# 3).Обычно, если оба S1 и S2 входят в обязательный набор, они будут вместе в Бэклоге. Если это не так, то либо у вас есть огромное количество того, что необходимо, и ваш проект не получит такого большого преимущества при использовании методов Agile, либо S2 действительно не обязательно. Так что, если вы ожидаете, что между приверженностью S1 и S2 пройдет много времени (месяцев?), То я бы выбрал интерфейс с 1 параметром. Время всегда вносит огромный вклад в неопределенность.
Обычно, если оба S1 и S2 входят в обязательный набор, они будут близко друг к другу в Бэклоге. Если это не так, то либо у вас есть огромное количество того, что необходимо, и ваш проект не получит такого большого преимущества с использованием методов Agile, либо S2 действительно не обязательно. Так что, если вы ожидаете, что между обязательствами по S1 и S2 пройдет много времени (месяцев?), То я бы выбрал интерфейс с 1 параметром. Время всегда вносит огромный вклад в неопределенность.
Обычно, если оба S1 и S2 входят в обязательный набор, они будут близко друг к другу в бэклоге. Если это не так, то либо у вас есть огромное количество того, что необходимо, и ваш проект не получит такого большого преимущества при использовании методов Agile, либо S2 действительно не обязательно. Так что, если вы ожидаете, что между обязательствами по S1 и S2 пройдет много времени (месяцев?), То я бы выбрал интерфейс с 1 параметром. Время всегда вносит огромный вклад в неопределенность.
тогда я бы выбрал интерфейс с 1 параметром. Время всегда вносит огромный вклад в неопределенность. тогда я бы выбрал интерфейс с 1 параметром. Время всегда вносит огромный вклад в неопределенность.Просто сделайте 1.
Рефакторинг - это легко, прогнозировать будущее - нет.
Проект может быть закрыт могут появиться новые более важные истории, что означает, что история 2 никогда не понадобится, к тому времени, когда вы дойдете до истории 2, вы сможете лучше понять проблему и вам потребуется все реорганизовать. Есть бесконечное количество причин, по которым он может вам не понадобиться.
к тому времени, когда вы дойдете до истории 2, вы, возможно, лучше поймете проблему и вам придется все реорганизовать. Есть бесконечное количество причин, по которым он может вам не понадобиться. к тому времени, когда вы дойдете до истории 2, вы, возможно, лучше поймете проблему и вам придется все реорганизовать. Есть бесконечное количество причин, по которым он может вам не понадобиться.Пуристы скажут вариант 1, но я бы прислушался к здравому смыслу, и если вы на 100% уверены, что это требование, то я бы учел это в вашем дизайне.
ОДНАКО Agile также во многом основывается на рефакторинге, поэтому, пока вы не публикуете этот интерфейс публично, я бы выбрал вариант 1, если его изменение не повлияет на мой дизайн.
При использовании современного инструмента разработки рефакторинг метода для получения второго параметра обходится очень дешево. Так что реализация первой истории, кажется, имеет наибольший смысл, а затем пересмотр метода, когда дело доходит до более поздней истории.
Однако ... Как и на все хорошие вопросы, ответ действительно «зависит от обстоятельств». В некоторых отношениях ваш пример слишком тривиален, чтобы отдать должное обсуждению. Что, если бы история A была «обновлением имени клиента», а история B добавила бы какую-то транзакционную функцию (возможно, paramB - это контекст TX). В таком случае, возможно, над вашими историями нужно поработать. Имеет ли смысл A без B? Реализуется ли A сегодня утром, а B сегодня днем, или B работает в следующем месяце?
"It depends." How you answer depends largely on how disciplined your team is.
The situation you describe invites a very small step across the line toward a slippery slope that leads to code bloat. The step is so small that you don't notice the slope. Is it safe? Probably, because it's a trivial example. Many "doesn't it make sense to go ahead and..." cases are larger. And the larger the step, particularly if it crosses a sprint boundary, the greater the chance that you'll guess wrong, and end up with wasted work and extra, unused code. Working in a system with a lot of dead or unused code sucks.
If your team that has a problem with code bloat, I'd "set the anticipation knob at zero" for a while, until people have a feeling for what it's like to build a system in small pieces with no anticipatory design. Seeing a system evolve cleanly is something many developers have never seen. Then revisit the decision. The most productive team I worked with left the knob set to zero and kept it that way for years.