2013-09-10 2 views
2

Мне нужно связаться с основным фреймворком IBM с помощью IBM WebSphere. Служба на стороне основного фрейма может использовать только плоские файлы.Мейнфрейм Плоский файл для классов C#

С моей стороны я хочу использовать CQRS (Command/Query)

Другими словами, я хочу сериализации команду/запросов и десериализации результатов запроса

я мог сделать это со стандартным отражением Offcourse, но мой вопрос в том, есть ли более хороший способ сделать это?

Могу ли я использовать динамику?

Flatfile > ParsedObjectStructured > Dynamic type > static type 

ответ

3

Это будет зависеть в очень много на то, что формат плоского файла, и как работает схема - это самоописываемый, например? Тем не менее, это звучит для меня как . Большинство работ здесь будут понимать формат плоского файла (и привязку схемы). Оттуда выбор «десериализации в статический тип» и «десериализация в динамический тип» является довольно спорным, и я бы сказал, что очень мало десериализации точки в динамическом типе просто для того, чтобы отобразить все это на статическую тип. Кроме того, статический тип может (опять же, в зависимости от специфики формата файла) - удобное место для украшения типов, чтобы сказать «вот как это интерпретировать», если требуется формат файла. Например (и я полностью выдумываю, как я иду вдоль - не ожидаем, что это относится к вашему формату):

[Frobber(Offset = 4, Format = DataFormat.LittleEndianInt32)] 
public int Id {get;set;} 

[Frobber(Offset = 0, Format = DataFormat.LittleEndianInt32)] 
public int Index {get;set;} 

[Frobber(Offset = 8, Format = DataFormat.FixedAscii, Size = 20)] 
public string Name {get;set;} 

[Frobber(Offset = 28, Format = DataFormat.Blob)] // implicit Size=16 as Guid 
public Guid UniqueKey {get;set;} 

где FrobberAttribute только то, что вы могли бы придумать, чтобы указать формат файла. Конечно, если схема определена внутри файла, это может быть необязательно.

Re reflection: основное отражение будет работать нормально, если данные достаточно легкие; но в целом отражение может быть довольно дорогостоящим. Если вам нужно, чтобы он был оптимальным, вы, вероятно, захотите, чтобы реализация рассмотрела стратегическое кэширование (т. Е. Только одно действие на открытие) и мета-программирование (превращение стратегии в готовый ИЛ, а не накладные расходы отражение во время выполнения).

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

+0

Я был немного неясен в моем вопросе, вопрос более ориентирован на создание объекта, когда у меня есть информация о сопоставлении. Контракт установлен, поэтому мне не нужно отмечать свойства с помощью настраиваемых атрибутов. Когда вы говорите, что IL готовый испеченный IL, вы имеете в виду сопутствующие в строках http://www.codeproject.com/Articles/14560/Fast-Dynamic-Property-Field-Accessors – Anders

+0

@ Аnders хорошо, может быть, не что-то * совершенно * , но да, то, что позволяет слишком часто вызывать 'SetValue' в' FieldInfo'/'PropertyInfo'. Но: если вы делаете это только иногда, даже это не боль. –

+0

Его около 1000 записей в результате, каждая запись имеет 10-30 столбцов, поэтому должно быть установлено не более 30 000 свойств + 1000 CreateInstance. У вас есть блог или статья о выпечке IL? его не то, что я использовал, спасибо. – Anders

Смежные вопросы