Вывод JSON / XML в GUI, BLL или DTO? - PullRequest
       43

Вывод JSON / XML в GUI, BLL или DTO?

1 голос
/ 07 октября 2011

Я использую согласование содержимого, поэтому в зависимости от заголовка запроса я предоставляю вывод в формате JSON / XML. Теперь мне было интересно, как лучше всего использовать эту функцию.

Информация: BLL = уровень бизнес-логики
DTO = объект передачи данных
DAL = уровень доступа к данным

Пример псевдокода для DTO

class ExampleDTO{
    propertie name;
    propertie description;
}

Пример псевдокода для BLL

class ExampleBLL{
    GetExample(name) returns ExampleDTO;
    GetExamples() returns List<ExampleDTO>;
}

1) В графическом интерфейсе с BLL-объектом: преобразовывает результат DTO из BLL в JSON / XML
2) В BLL: что-то вроде ... getObjectJSON () -> преобразует и возвращает DTO-ввод в формат JSON
3) В DTO: поведение как ... toJSON () toXML () как toString ()
4) Или дополнительные DTO только с 1 свойством (json / xml)
5) Что-то еще? ...

* Лично я думаю (1) неправильно по причине не допускать логику в GUI, (4) кажется чрезмерным иметь дополнительные DTO, такие как WebJsonExampleDTO И WebXmlExampleDTO только с одним свойством

1 Ответ

1 голос
/ 15 октября 2011

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

  1. Храните тип ответа отдельно от BLL, поскольку BLL не нужно ничего делать с типом ответа.

  2. У вас должен быть один слой, который будет принимать два параметра: один тип ответа, а второй - функцию, которую нужно вызвать.

    • Этот слой будет вызывать BLL
    • BLL вернет DTO
    • Теперь вы должны преобразовать DTO в запрошенный тип, т.е. JSON / XML
    • Вернуть конвертированный DTO в Cally.
  3. Наконец, у вас будет 3+ слоя GUI, Conversion Layer и BLL. Также BLL будет взаимодействовать с DAL.

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

...