Что вы думаете о библиотеке инструментов управляемого контракта
Недавно я видел это видео http://channel9.msdn.com/pdc2008/TL51/ о библиотеке управляемых инструментов Контракта, которая, безусловно, выглядит очень интересной. К сожалению, кажется, что они не включат это в сам язык, который был бы более элегантным, как в SpeC#. Было бы неплохо иметь оба варианта в C#4.0, поскольку контракты добавляют много шума в бизнес-код.
Кто-нибудь здесь использовал это и имел реальную обратную связь? Не могли бы вы также добавить контракты в свойства класса и даже переменные? Что-то вроде
decimal Percentage (min 0, max 1)
string NotNullString (not null, regex("??"))
может быть, было бы хорошо.
2 ответа
Я пытаюсь это сделать, но я думаю, что библиотека слишком молода, чтобы ее можно было серьезно использовать в больших проектах, по крайней мере с включенными статическими проверками: компиляция идет очень медленно, а конкретные предупреждения не очень понятны для чтения.
Проверки во время выполнения могут использоваться без проблем, потому что они, кажется, реализованы как Debug.Assert. По крайней мере, вы документируете методы.
Чтобы добавить контракты к свойствам, я бы добавил ограничения к свойству set, но в этом конкретном случае я думаю, что было бы лучше написать класс, который мог бы фактически инкапсулировать требования, позволяя создавать только хорошие объекты. Тем не мение:
private decimal _Percentage;
decimal Percentage
{
get{ return _Percentage;}
set
{
CodeContract.RequiresAlways(value <= 1);
CodeContract.RequiresAlways(value >= 0);
_Percentage = value;
}
}
PS: Мне кажется, что тенденция в C# идет в направлении динамической типизации, вместо того, чтобы перейти к строгим и строгим методам кодирования типизации. Я думаю, что DbC лучше работает со строгой типизацией, хотя бы потому, что позволяет добавлять больше требований к типам и функциям.
Кажется, что библиотека контрактов могла бы хорошо подойти для Linq2Sql. Определите поля и ограничения в вашей базе данных SQL, и контракты могут быть сгенерированы для вас. Это может быть хорошим введением в контракты.