hadoop-pig-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Benjamin Francisoud (JIRA)" <j...@apache.org>
Subject [jira] Created: (PIG-70) Improve PigContext code by using Factory Pattern
Date Wed, 23 Jan 2008 16:15:34 GMT
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.


Mime
View raw message