alexey_rom: (Default)
Bart de Smet пишет о новой Reactive Framework, которая войдёт в .NET 4.0 (очень интересная и полезная библиотека, кстати; и многие идеи взяты опять-таки из ФП, а точнее из Functional Reactive Programming).

В своём последнем посте он упомянул комбинатор Using, служащий для выделения ресурса и его освобождения после завершения работы с последовательностью. ... )
alexey_rom: (Default)
Два хороших, по-моему, применения принципа DRY на C#.

1. Как улучшить проверку аргументов и заменить

if (dst == null)
throw new ArgumentNullException(”dst”);

if (src == null)
throw new ArgumentNullException(”src”);

if (dstOffset + length > dst.Length || dstOffset < 0)
throw new ArgumentOutOfRangeException(
“dst, dstOffset, length”,
string.Format(”dst range is not within bounds, ({0} + {1}) > {2}”, dstOffset, length, dst.Length));

if (srcOffset + length > src.Length || srcOffset < 0)
throw new ArgumentOutOfRangeException(
“src, srcOffset, length”,
string.Format(”src range is not within bounds, ({0} + {1}) > {2}”, srcOffset, length, src.Length));

if (length < 0)
throw new ArgumentOutOfRangeException(”length”, “length must be >= 0, ” + length.ToString());

на

Validate.Begin()
.IsNotNull(dst, “dst”)
.IsNotNull(src, “src”)
.Check()
.IsPositive(length)
.IsIndexInRange(dst, dstOffset, “dstOffset”)
.IsIndexInRange(dst, dstOffset + length, “dstOffset + length”)
.IsIndexInRange(src, srcOffset, “srcOffset”)
.IsIndexInRange(src, srcOffset + length, “srcOffset + length”)
.Check();

без выделения объектов в случае отсутствия исключений.

2. Как автоматически получить осмысленные сообщения об ошибке в юнит-тестах:
Test.Assert(() => customer.Name != null && customer.Name != “”)
при пустом customer.Name даёт
TestCustomerDefaultPropertyValues failed.  Values are same.  Expected not “”, got “”.  customer.Name != “”

Profile

alexey_rom: (Default)
alexey_rom

April 2012

S M T W T F S
1 234567
89 1011121314
15161718192021
22232425262728
2930     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 25th, 2017 06:21 am
Powered by Dreamwidth Studios