Separation of Concerns.

You have data that you get from somewhere and you need to send it to someplace in someformat. So, you have 4 sections of your app:

  1. The code that controls how you get your data (model)
  2. The code that controls how you communicate with your user (view)
  3. The code that formats what gets sent to your user (view)
  4. The code that coordinates all of this (controller)

This is also known as MVC, or Model-View-Controller. You can see where stuff falls.

Now, the way this all works is that you have API boundaries. So, no matter where you get your data, the Model code will return back the exact same data structure. So, you could get your data from a database, a CSV, some RPC call, or any combination of options. But, as far as the rest of the code is concerned, the data has been retrieved in some known structure. And, the same goes for the other pieces.

What does this mean for your question? It's very simple - you should have several Formatter objects that each accept a known data structure. They will then emit the appropriate stuff for the I/O section to send back to the user. In certain circumstances, the formatter may also provide metadata, such as the Content-Type (for webapps).

Template Toolkit or HTML::Template are excellent templating modules. You can use Text::xSV to construct the CSV side of things. If you need, Excel::Template and PDF::Template can be used for other formats. And, other than Text::xSV, they can all take the exact same datastructure, which (coincendentally enough) is the datastructure provided when you do something like:

my $results = $sth->fetchall_arrayref({});

My criteria for good software:
  1. Does it work?
  2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?

In reply to Re: Exporting data from database as HTML or CSV by dragonchild
in thread Exporting data from database as HTML or CSV by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.