У меня такая ситуация: между двумя наборами данных есть отношения родитель-ребенок. У меня есть родительская коллекция документов и дочерняя коллекция документов. Требование заключается в том, что родительские и соответствующие им дочерние документы должны быть экспортированы в документ pdf. Простая реализация вышеописанной ситуации может быть следующей (псевдокод на java ниже):
for(Document parentDocument:Documents){
ExportToPdf(parentDocument);
for(Document childDocument:parentDocument.children()){
AppendToParentPdf(childDocument);
}
}
Что-то, как описано выше, вероятно, решит проблему, но внезапно требования меняются, и теперь каждый из этих родителей и их соответствующих детей должен быть в отдельных pdf, поэтому вышеприведенный фрагмент модифицируется путем изменения AppendToParentPdf()
на ExportToPdf()
:
for(Document parentDocument:Documents){
ExportToPdf(parentDocument);
for(Document childDocument:parentDocument.children()){
ExportToPdf(childDocument);
}
}
Идя таким путем, не пройдет много времени, как этот, казалось бы, тривиальный фрагмент будет страдать от некоторых серьезных запахов кода.
Мои вопросы к SO:
Существуют ли лучшие представления отношений родитель-ребенок, такие как вышеупомянутые, где вместо того, чтобы пробивать путь через все документы и их дочерние элементы методом O(n^2)
, я могу использовать другую структуру данных или технику для более оптимального обхода всей структуры.
В сценарии, который я описал выше, где бизнес-правила довольно изменчивы относительно того, как должны экспортироваться pdf-файлы, есть ли более разумный способ закодировать природу функции экспорта? Кроме того, формат экспорта изменчив. PDF может уступить место *.docs/csvs/xmls и т.д.
Было бы здорово получить некоторые перспективы на этот счет.
Thanks