Хорошие способы отформатировать файл - PullRequest
2 голосов
/ 18 марта 2011

На работе мне нужно отформатировать файл платежей, чтобы иметь возможность общаться с банками.Проблема в том, что все банки просят другой формат.Прямо сейчас мы используем шаблонный шаблонный метод [GOF], пытаясь сделать это как можно более универсальными, но в результате те же 3 класса повторяются для каждого формата.

класс, наследуемый от asbtract absPaymentFile (с Inversionof control) класс, унаследованный от Payment (содержит информацию о платеже, иногда имеющего 1 или 2 атрибута, отличного от других классов платежей), класс, унаследованный от absMerchant (содержит информацию о продавце и способ его реализации)

Есть ли способ отформатировать файл с «почти» той же информацией, в несколько раз лучше, чем мы делаем сейчас?

эта ссылка должна предоставить вам хорошую базовую строку того, что мне нужно сделать: https://www.vancity.com/lang/fr/SharedContent/documents/CPA_Std005_Specs.doc

Это .doc!

Спасибо!

Ответы [ 4 ]

2 голосов
/ 18 марта 2011

Пройдя путь создания чего-то, что потребует лишь незначительных настроек для поддержки нескольких форматов, я бы сказал, что нет.Принципы СУХОЙ здесь не применяются, потому что каждый новый формат действительно и действительно независим от других и может измениться.

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

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

1 голос
/ 18 марта 2011

Я хотел бы изучить использование формата, поддерживаемого библиотекой C #, такого как XML или JSON , чтобы вам не приходилось изобретать колесо при чтении или записи файла.Оба из упомянутых форматов позволят вам иметь дополнительные атрибуты.Например,

<elements>
    <element name="name1" value1="somevalue" company1specific="something" />
    <element name="name1" value1="somevalue" specificToAnotherCompany="something" />
</element>

или

{
    "elements" : [
        { "name":"name1", "company1specific":"something" },
        { "name":"name1", "specificToAnotherCompany":"something" }
    ]
}

Надеюсь, это поможет.

0 голосов
/ 19 марта 2011

Вам нужен внутренний «Master Format», а затем DocumentConverter, который берет MasterFormatFile и преобразует его в желаемый вывод.

Заставьте MasterFormatFile представить общий API, почти как значение ключа get в качествеСловарь, но с некоторой другой поддержкой.

Расширение на новый FileFormatter Будет простым и модульным.

0 голосов
/ 18 марта 2011

Если используются плоские форматы файлов, взгляните на эту библиотеку: http://www.filehelpers.com/. Библиотека позволит вам представлять формат с использованием класса с атрибутами класса и члена.

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

...