Плюсы и минусы конфигурации Fluent и XML

Если вы собираетесь начать новый проект с некоторыми сторонними библиотеками (логирование, orm, di, что угодно), вы бы предпочли настроить все эти библиотеки с помощью программирования с плавными интерфейсами или с файлами XML?

Вы бы использовали библиотеку, которая поддерживает только один из этих вариантов (Fluent или XML)? Или вы предпочитаете библиотеки, которые дают вам возможность выбирать между различными стратегиями конфигурации.

Для тех, кто любит код, возьмите это как гипотетический пример (написанный на C#).

Это свободная конфигурация:

LogConfiguration.ConfigureStorage()
   .ForDatabase("CommonDB")
     .AsMsSqlDatabase()
     .WithConnectionString("server=(local); database=Northwind; Integrated Security=true;")
     .AsDefault();

Это конфигурация XML:

<logging>
    <database name="CommonDB" provider="MSSQL" connString="server=(local); database=Northwind; Integrated Security=true;" default="true" />
</logging>

Наконец, каковы плюсы и минусы конфигурации Fluent и XML?

До сих пор мы пришли к этому:

Свободная конфигурация в коде

Плюсы

  • Строго типизированный, оцениваемый компилятором
  • Условная конфигурация

Минусы

  • Невозможно перенастроить после сборки

Конфигурация XML

Плюсы

  • Возможность легкого изменения после развертывания

Минусы

  • XML многословен
  • Более уязвим к опечаткам

person goenning    schedule 28.02.2011    source источник


Ответы (3)


Я склонен использовать xml для атрибутов, которые я, возможно, захочу изменить после сборки (например, строки подключения, регистраторы).

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

person jenson-button-event    schedule 28.02.2011

Если я правильно вас понял, под свободным вы имеете в виду код? Если да, то определенно я бы выбрал XML. Если под свободно вы имели в виду чистые текстовые файлы, то я бы все же выбрал XML. Плюсы:

  • удобочитаемость
  • самодокументирующиеся теги (конечно, если вы их создадите;))

Минусы:

  • длина файла, но я бы не стал заморачиваться по этому поводу

В настоящее время все мои проекты основаны на XML.

person soltysh    schedule 28.02.2011
comment
Вы можете иметь такую ​​же (или даже лучшую) читаемость с конфигурацией в коде, возьмем в качестве примера разницу между файлами FluentNHibernate и .hbm.xml. В этом случае мне проще понять Fluent. - person goenning; 28.02.2011
comment
В примере автор упомянул что-то важное - › конфигурация БД. В этом случае определенно лучше подходит XML. В то время как конфигурация сущностей hibernate я также размещаю в исходном коде. Вопрос в том, что на самом деле имел в виду автор? Какая часть конфигурации? - person soltysh; 28.02.2011
comment
Я автор :) Мой комментарий к вашему ответу был о читаемости, а не о ремонтопригодности. Говоря об изменении конфигурации после развертывания (например, строки подключения), я также согласен с тем, что XML лучше. - person goenning; 28.02.2011
comment
Извините, я пропустил ваше имя пользователя ;) - person soltysh; 28.02.2011

Я бы сказал, что конфигурации XML могут быть менее подробными и даже проще, чем конфигурации Java.

Посмотрите на мое сравнение той же конфигурации на XML и на Java DSL в Spring Integrations wireTap конфигурация

Также конфигурации XML могут быть более знакомы менее опытным программистам. Так что усилий по сопровождению таких конфигов в будущем может быть меньше.

person Andriy Kryvtsun    schedule 04.03.2016