Чтобы узнать больше об архитектуре и о том, как я решил ее. У меня есть следующие проекты / сборки:
- Бизнес-объекты
- VB XML De / Serialization библиотека
- Проект ASP.NET MVC
Сборка VB XML обрабатывает сериализацию бизнес-объектов, имеющих дело только с бизнес-моделью (# 1). Поэтому я бы вывел XElement примерно так:
<invoice>
<invoiceId>1234</invoiceId>
<customer>Hudsucker Industries</customer>
<otherBusinessData>etc, etc</otherBusinessData>
</invoice>
Проблема возникает из-за того, что я использую jqGrid, и мне нужно добавлять элементы в каждый счет для определенных действий, поэтому мне нужно что-то вроде:
<invoice>
<actionHtml><![CDATA[ ...some HTML such as links... ]]></actionHtml>
<invoiceId>1234</invoiceId>
<customer>Hudsucker Industries</customer>
<otherBusinessData>etc, etc</otherBusinessData>
</invoice>
Я заставил его работать, но мне пришлось сгенерировать весь actionHtml в контроллере, который явно не является хорошим разделением проблем, и я потерял все свои методы HtmlHelper и тому подобное. Итак, как я в итоге решил, что «правильный» путь таков:
- Использование представления веб-форм (я использую представления Брайля для своих страниц) [поэтому я могу использовать атрибут страницы ContentType, чтобы установить его в XML].
- Передать коллекцию моих необработанных бизнес-объектов в качестве данных модели.
- Цикл коллекции моделей, создание элемента actonHtml для каждого счета в представлении (следовательно, получение моих методов HtmlHelper и т. Д.)
- Чтобы вывести фактические бизнес-элементы, я могу просто вызвать мою библиотеку VB XML и сделать:
invoice.ToXml().Elements().ToString()
и я в порядке.
Чтобы сделать это более пригодным для повторного использования, я создал главную страницу jqGrid, в которой есть все записи и тому подобное в областях содержимого, поэтому я могу просто передать эту информацию на реальных страницах и просто беспокоиться о выводе данных элемента.