Moq, Ninject, Свободная библиотека в стиле NHibernate? - PullRequest
3 голосов
/ 27 ноября 2010

Это вопрос мозгового штурма. Любые комментарии будут оценены.

Недавно я наблюдал несколько исходных структур с шаблоном, похожим друг на друга.

Moq

mock.Setup(framework => framework.DownloadExists("2.0.0.0"))
    .Returns(true)
    .AtMostOnce();

Ninject

Bind<IService>().To<RedImpl>().WhenMemberHas<RedAttribute>();

и Свободный NHibernate

   HasManyToMany(x => x.Products)
     .Cascade.All()
     .Table("StoreProduct");

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

Я могу сказать, что мне нравится этот стиль, но не могу понять, почему именно.

Может кто-нибудь сказать мне, какое преимущество он имеет и когда этот стиль будет полезен? Кроме того, есть ли название для такого стиля? Как это реализовано под капотом? Если есть учебник о том, как писать в стиле Moq, это очень ценится.

Обновление

Спасибо за помощь. Теперь, когда я знаю, что этот стиль называется Fluent Interface , есть ли руководство по созданию примера интерфейса Fluent?

Ответы [ 3 ]

4 голосов
/ 27 ноября 2010

Шаблон называется Fluent Interface и более подробно описан в http://www.martinfowler.com/bliki/FluentInterface.html

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

Хотя это не обязательно связано, вы можете сравнить шаблон Builder для альтернативного подхода к построению сложных объектов, поскольку некоторые из сценариев мотивации похожи.

2 голосов
/ 27 ноября 2010

Они являются текущими интерфейсами и обычно используются для создания небольших DSL для некоторых задач (таких как конфигурация).Они имеют преимущества перед текстом, так как они могут проверяться типом компилятором.

Например, многие контейнеры IoC могут быть настроены с использованием xml - это имеет некоторые преимущества, такие как простое развертывание изменений конфигурации, но является хрупкимв случае некоторых рефакторингов, таких как переименование типа.

2 голосов
/ 27 ноября 2010

Он называется Свободный интерфейс

Основным преимуществом этого стиля является то, что вы можете легко читать и писать код для построения сложных объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...