Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: OT: Rewrite or Refactor?

by bobf (Monsignor)
on Aug 27, 2006 at 04:30 UTC ( #569858=note: print w/replies, xml ) Need Help??


in reply to OT: Rewrite or Refactor?

Without knowing anything about the code in the one application/three products, it will be hard to give you specific advice.

In past projects I've used a combination approach that attempts to balance the positives and negatives of refactoring and rewriting. In your case, I might suggest designing the architecture how you want it to be and then start to rewrite it, but take as many snippets as possible from the current code and refactor them as needed when you plug them into the new design (the latter might be aided by doing some minor refactoring of the existing code first - breaking out code into subroutines, adding blocks to tighten the scope of variables, etc). That would give you the new design that you need, but it would leverage some of the functionality and strengths of the existing code so you don't have to rewrite the whole thing from scratch (provided there are pieces that are good enough to salvage).

Regardless of the approach you take, the Perl Medic will likely help. In addition, a few recent threads may be of interest, including Strategies for maintenance of horrible code?, Consideration for others code, and Perl in the Enterprise (the latter mentions Devel::Refactor and the PPI refactoring editor).

Good luck.

Update: ++ to GrandFather for the comments about adding a test suite. I thought of it, then forgot to include it (that's what I get for posting while tired). Read his node - he said it better than I would have, anyway. :-)

Replies are listed 'Best First'.
Re^2: OT: Rewrite or Refactor?
by badaiaqrandista (Pilgrim) on Aug 27, 2006 at 07:59 UTC

    Firstly, thanks for the reply.

    The structure of the code is roughly like three tier architecture with all the tiers are running in one apache process (compiled with mod_perl), so they are only logically separated. I have database layer, which abstract the SQL creations and database connections. Then there is the business logic layer, which implement the (surprise!) business logic with all modules being coded in object oriented way. And the top layer is the application layer, which basically is a web-application-framework-wannabe that I wrote myself due to unavailability of the framework that meets my needs.

    The new architecture that I am planning to create is splitting the three layers into different applications and make them communicate with XML-RPC or other communication protocol. And probably also split one or two sub system that warrants running on their own to become an independent application. We need to do this to allow us to scale to the next level.

    Another big thing in this new architecture is the new database structure. Currently we have hundreds of databases with the same schema that we keep up to date using a script. We want to move all of them to one database so we can use facilities provided by the database to improve performance and keeping data integrity.

    I have Perl Medic book, but I haven't read it yet. But I will. Looking forward to hearing from you.

    Thanks

    -cheepy-

      What do you expect to gain from the XML-RPC?!? Apart from the need of beefier hardware. Do you need to be able to run those three layers on separate servers (using several computers for the same layer even)? Maybe there is a good reason, I'm just curious.

        Yes I need them to run on different servers. I'll probably make up my own communication protocol instead of the XML-based protocols. It's still up for discussion. As long as I can port this old architecture to the new one with the least risk as possible, I don't care how each layer communicate with each other.

        -cheepy-

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://569858]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2020-10-19 16:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My favourite web site is:












    Results (205 votes). Check out past polls.

    Notices?