Программисты любят всё делать правильно. "Потому что мало ли что пользователь или заказчик выкинет завтра". Но если научиться разделять "правильно вообще" и "правильно для меня/проекта", то можно получить неожиданный профит.
Примеры.
Примеры.
- Репликация - тема очень сложная и много копий сломано в дискуссиях типа "какую репликацию выбрать - MS или Oracle". Но, если условия задачи говорят, что нужна репликация по схеме "звезда" и одна и та же запись никогда не будет редактироваться на двух серверах, то можно построить очень простую бесконфликтную систему, которая вообще не будет требовать участия человека. Это требует разового выделения времени разработчика, но постоянные расходы на поддержку равны нулю.
- В 1С есть замечательный инструмент - регистры. Они очень хорошо соединяют идеологию реляционных БД и построение сложных отчетов. Цена - их нужно поддерживать в актуальном состоянии, следить за последовательностью и т.п. Потому что универсальные. В конкретной задаче зависимость от последовательности вовсе не обязательна, а объем пересчета очень сильно зависит от специфики регистра и его разрезов. Для простых случаев легко решается триггерами.
- (Совсем техническое) Ниже приводятся несколько способов вычисления начала месяца на TSQL. Самый эффективный - №2, но он работает верно только если входное значение не содержит время. Из правильных самый эффективный №1, разница в скорости примерно 10%. Делайте выводы.
- DATEADD(month, DATEDIFF(month, 0, @mydate), 0)
- DATEADD(DD, 1 - DAY(@mydate), @mydate)
- CAST(FLOOR(CAST(@mydate AS DECIMAL(12, 5))) - (DAY(@mydate) - 1) AS DATETIME)
- CAST(CAST(YEAR(@mydate) AS VARCHAR(4)) + '/' + CAST(MONTH(@mydate) AS VARCHAR(2)) + '/01' AS DATETIME)
Вывод - правильно продуманные ограничения области применения алгоритма может значительно сказаться на сроках, сложности и стоимости. Рекомендую почитать по теме статью на Википедии - в ней кратко описан подход и некоторые дополнительные бонусы (уменьшение количества кода в готовом продукте). А также инструментарий для Visual Studio от Microsoft - Code Contracts. Code Contracts умеет статически работать с кодом а также удобнее в использовании, чем Debug.Assert.
Комментариев нет:
Отправить комментарий