Что вы думаете о библиотеке инструментов управляемого контракта - PullRequest
1 голос
/ 26 января 2009

Я недавно видел это видео http://channel9.msdn.com/pdc2008/TL51/ об управляемой библиотеке инструментов Contract, которая, безусловно, выглядит очень интересной. К сожалению, кажется, что они не включат это в сам язык, который был бы более элегантным, как в Spec #. Было бы неплохо иметь оба варианта в C # 4.0, поскольку контракты добавляют много шума в бизнес-код.

Кто-нибудь здесь использовал это и имел обратную связь с реальным миром? Не могли бы вы также добавить контракты в свойства класса и даже переменные? Что-то вроде

decimal Percentage (min 0, max 1)
string NotNullString (not null, regex("??"))

было бы неплохо.

Ответы [ 2 ]

2 голосов
/ 30 января 2009

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

Проверки во время выполнения могут использоваться без проблем, потому что они, кажется, реализованы как Debug.Assert. По крайней мере, вы документируете методы.

Чтобы добавить контракты к свойствам, я бы добавил ограничения к свойству set, но в этом конкретном случае я думаю, что было бы лучше написать класс, который мог бы на самом деле инкапсулировать требования, позволяя создавать только хорошие объекты. В любом случае:

    private decimal _Percentage;
    decimal Percentage
    {
        get{ return _Percentage;}
        set
        {
            CodeContract.RequiresAlways(value <= 1);
            CodeContract.RequiresAlways(value >= 0);
            _Percentage = value;
        }
    }

p.s: Мне кажется, что тенденция в C # идет в направлении динамической типизации, а не в сторону методов строгой и строгой типизации. Я думаю, что DbC * ​​1009 * лучше работает со строгой типизацией, хотя бы потому, что она позволяет добавлять больше требований к типам и функциям.

0 голосов
/ 30 января 2009

Похоже, что библиотека контрактов может хорошо подойти для Linq2Sql. Определите поля и ограничения в вашей базе данных SQL, и контракты могут быть сгенерированы для вас. Это может быть хорошим введением в контракты.

...