Статическая проверка для рамочных конвенций - PullRequest
9 голосов
/ 27 января 2012

Существует ли продукт / проект, который позволял бы вам определять соглашения, например, для проекта MVC, чтобы статически проверять соглашения об именах, такие как добавление контроллера в конец классов, которые наследуются от контроллера, и / или принудительное использование определенной сигнатуры метода при декорированииметод с атрибутом.

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

Необходимые ключевые функции:

  • Проверка статического времени / времени компиляциинарушенные правила
  • Возможность нацеливать методы, украшенные определенными атрибутами (через RegEx или Wizard)
  • Различные наборы правил, основанные на различных типах проектов.(пример: набор соглашений для приложения MVC, другой набор для приложения веб-форм и другой набор для библиотеки классов с суффиксом .BLL)

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

1 Ответ

4 голосов
/ 28 января 2012

Личный опыт здесь, но я всегда пишу тесты для подобных вещей. Я анализирую свои сборки и проверяю, что все идет по соглашению. Для пары конкретных примеров я проверяю объекты запросов / ответов WCF, чтобы убедиться, что они не отправляют «DTO» по проводам и все они находятся в согласованном пространстве имен XML.

Вот краткий пример, который гарантирует, что все методы службы возвращают что-то, что наследует объект BaseResponse:

[Test]
public void All_IMyService_methods_should_return_a_BaseResponse()
{
    var methods = typeof (IMyService).GetMethods();
    foreach (var methodInfo in methods)
        Assert.That(typeof (BaseResponse).IsAssignableFrom(methodInfo.ReturnType), "Service Method " + methodInfo.Name + " does not return a BaseResponse");
}

Я уверен, что у кого-то будет что-то лучше / более автоматизированное, но у меня это сработало.

...