Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17


How to understand new java web application

Posted on 2014-02-21
Medium Priority
Last Modified: 2014-03-10
Let us say main java program is in xyz.class(in package test1) which has A() method which has C() method inside that.

public void A() { C() ; }

but C() method is in different class say abc.class in different package say test2.

I keep changing to new projects every 3-6 months due to nature of my job.
If i go to new project to understand the java application esp. if one class is in service layer other classs is DAO layer etc it adds more complexity to remember.

Let us say if there are UI files(login.jsp. order.jsp, confirmation.jsp of shopping cart) from which we are doing some CRUD operation on the database with UI, SErvice, DAO etc layers is it is good idea to take paper and pen and write the flow from which package ,class, method, line which other package ,class, method, line getting called or put debug points on specific lines. Challenge is when code changes by other deveopers line numbers keep changing also.

How to understand and document the flow so that i remember al the time with quick glance wthout spending too much time.

I tried each step as screenshot and paste in word document and refer that and also take hard copy of printout. But some times that documet coming too long like 50-100 pages which is bit challenge.

please advise
Any links resources ideas highly appreciated. Thanks in advance
Question by:gudii9
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
LVL 28

Accepted Solution

dpearson earned 2000 total points
ID: 39877428
If you're dealing with an application that has multiple layers (e.g. a UI layer and a database layer) then I'd suggest using a combination of 2 different strategies.

First approach is to examine the code within a single layer.  When there is a call to a new layer, ignore it for now and try to infer what the classes and methods in the new layer will be doing from just the names and parameters to the methods.


public void A() {
    int param1 = B() ;
    int param2 = C() ;
    DAO object = createDAOObject(param1, param2, ...) ;
    object.storeInDatabase() ;

If B and C are in the same layer/package as A then examine then as you are reading through A.

But if createDAOObject() and storeInDatabase() are in a different layer, then ignore them for now and assume they are doing what they say (in this case saving to the database).

Once you have a good understanding for what method A() does in the current layer, then you can come back to understanding what the next layer does.

This breaks the problem down into more manageable pieces.  But in the end, a project with a large code base will always be hard to understand unless the boundaries between the components are clearly defined and easy to understand.  That's part of the skill in designing a big project.

As to how to record this - I've never seen a good way to represent it as a set of images or text.  People have tried (e.g. flowcharts were designed to show just this) but they are almost always too large and unmanageable.  In the end it usually has to just live in your head.

Hope that helps,


Author Comment

ID: 39878570
Adding to complexity some methods come from classes of jar files which do not open in eclipse. How to take them also into consideration?
LVL 28

Expert Comment

ID: 39878818
Treat external JAR files the same way that you treat code from another layer.

Don't try to follow the code into those files (which for an external JAR without source, is of course impossible) and instead just understand the methods as best you can from the available documentation, names and parameters.

Quick Start: DOCKER

Sometimes you just need a Quick Start on a topic in order to begin using it.. this is just what you need to know to get up and running with Docker!


Author Comment

ID: 39881490
Nothing to do with identifying the design patterns to understand the web application right. Otherwise that is also one other challenging task to identify different design patterns in different layers like UI, service, DAO etc. Please advise
LVL 28

Expert Comment

ID: 39881636
Yes you generally don't need to worry about identifying design patterns when trying to understand a set of code.

You might very occasionally recognize that the code you are reading is following a specific design pattern, but design patterns are much more useful when writing code than when reading it.  They're a way to discuss and implement different designs, rather than a way to think about the code when reading it.  99.9% of the code you read will not be part of a design pattern.

Author Comment

ID: 39893902
That makes more sense

99.9% of the code you read will not be part of a design pattern.

Above line is not clear. I thought other way. can you please elaborate?
LVL 28

Expert Comment

ID: 39893927
Design patterns tend to be used to solve specific types of problems.  E.g. How do you write code to interface to another module - maybe I'll use the Adapter Pattern.  So the code you write to connect one interface to another could be said to be part of a design pattern, but the two sides of the connection are not.

In my experience, the vast majority of code in a system is not built to meet a specific design pattern.  It's largely code providing direct functionality - e.g. code to write to a database, code to verify input parameters in a request etc.

You learn design patterns so you have a set of tools to help solve hard problems.  But most of the code we write should not be solving hard problems - those should only come up occasionally, allowing most of what we write to be simple and easy to write.  If it all seems hard, then something is probably wrong with how you are doing it.


Featured Post

Automating Terraform w Jenkins & AWS CodeCommit

How to configure Jenkins and CodeCommit to allow users to easily create and destroy infrastructure using Terraform code.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
In this post we will learn different types of Android Layout and some basics of an Android App.
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
Suggested Courses

722 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question