Improve PigContext code by using Factory Pattern
------------------------------------------------

                 Key: PIG-70
                 URL: https://issues.apache.org/jira/browse/PIG-70
             Project: Pig
          Issue Type: Improvement
          Components: impl
    Affects Versions: 0.1.0
            Reporter: Benjamin Francisoud


Even if the PigContext code is still quite small at the moment, for an outsider 
(me) it's already hard to understand :(

If I understand correctly the PigContext purpose (on a Object Oriented point of 
view) is to hold various configuration objects like JobConf, JobClient, 
JobSubmissionProtocol...
The initialization code mainly use the ExecType parameter but can also use 
quite complex code like: doHod(), initProperties(), connect()...
(btw, the connect() method is actually doing 2 things: initializing some var 
and trying to connect, it initialization code should be move somewhere else)

It is the perfect case to apply the [Factory 
Pattern|http://en.wikipedia.org/wiki/Factory_method_pattern] , you can also see 
[Replace Constructor with Factory 
Method|http://www.refactoring.com/catalog/replaceConstructorWithFactoryMethod.html]
 for more details.

My proposal is to create a new PigContextFactory class, to old the 
initialization code make to PigContext and PigContextFactory 200 lines classes 
instead of one big 500 lines of code class.
PigContext would hold some getter and setter and methods related to 
instantiate/run "functions"

The new API would be:
h4. PigContextFactory .java
{code:java}
public class PigContextFactory {
    public static PigContext getInstance(ExecType execType) {...}
}
{code}

h4. PigContext.java
{code:java}
public class PigContext implements Serializable, FunctionInstantiator {
    public String getJobName(){...}
    public JobSubmissionProtocol getJobTracker() {...}
    public JobConf getConf() {...}
    public static Object instantiateFuncFromSpec(String funcSpec) throws 
IOException{...}
    public Object instantiateFuncFromAlias(String alias) throws IOException 
{...}
    public void registerFunction(String function, String functionSpec) {...}
}
{code}

h4. Client code
{code:java}
PigContext context = PigContextFactory.getInstance(ExecType.MAPREDUCE);
{code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to