DI и JSON.NET

Я использую JSON.NET, чтобы преобразовать в последовательную форму и десериализовать объект в различных целях. Я - большой поклонник DI, но кодекс ниже дает мне холода. Запахи как плохой кодекс:

public class Foo : Baz
{
    private readonly IBar bar;

    public Foo()
        : this(ObjectFactory.GetInstance<IBar>())
    { }

    public Foo(IBar bar)
    {
       if (bar == null)
            throw new ArgumentNullException("bar");

       this.bar = bar;
    }

   ... rest of class ...
}

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

string jsonString = ...;
string concreteBazType = ...;

Baz baz = (Baz)JsonConvert.DeserializeObject(jsonString, Type.GetType(concreteBazType);

Заметьте класс, Фу наследует от абстрактного базового класса Бэза!

Мой вопрос всему Вы DI и гики JSON.NET там: как я могу измениться на кодекс, чтобы избежать кодового запаха, конструктор по умолчанию дает мне в классе Фу?

11
задан Steven Sudit 26 January 2010 в 18:13
поделиться

1 ответ

Это распространенная проблема со всеми видами объектов передачи данных , подходит ли они в JSON.NET, WCF или другие технологии. На самом деле, вы могли бы сказать, что все нанесение приложения классы страдают от этой проблемы до одной степени или другой. Проблема эквивалентна для управления форм Windows и других технологий отображения.

В другом конце стека приложений мы видим одинаковую проблему с объектами конфигурации и потенциально с некоторыми типами ORM (таких как классы Ornacty Framework).

Во всех случаях наилучший подход состоит в том, чтобы лечить все такие граничных объектов как глупые типы с большей структурой, чем поведение. Мы уже знаем, что это правильно, чтобы сделать для WCF DataContratts, ASP.NET MVC Views, Windows Forms Controls и т. Д. Это было бы известным решением проблемы.

Также как у нас есть контроллеры, чтобы заполнить представления в интерфейсе UI, мы можем иметь сервисные операции, Mappers и athnot, которые отображают DTOS до доменных объектов. Другими словами, ваш лучший регресс будет не пытаться сериализовать Foo вообще.

вместо этого определяют класс Foojson , который представляет статическую структуру FOO и использовать Mapper для перевода между двумя.

20
ответ дан 3 December 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: