On 16/10/2009, at 7:21 AM, Lim Hock-Chai wrote:
In MVC arrangement, the M, V, and C are typically executable objects.
That depends entirely on the environment in which you're building  
things. MVC originated in Object Oriented Programming where each of M,  
V, or C is a class and therefore is an executable object. That's just  
an artefact of the environment (Smalltalk, Eiffel, Java, etc.). There  
is no reason why MVC cannot be implemented using modules in a non-OO  
language.
I never see M, V, and C as modules.  One of the main purpose of MVC  
is to
allow single point business logic (the M).  I'm not understanding the
concept of creating them as module.
The business logic for sales orders is different from the business  
logic for resource planning. There is no reason why they would be in  
the same M therefore implementing them in separate modules makes sense.
Even if you want to do it as
module, what is the different between making them a *SRVPGM vs *MODULE
or just make them become one single *module if you know that no other
program will ever need to bind each individual *module?
You're missing the whole point.
The screens for order entry are specific to order entry and will be  
used nowhere else. The logic for order entry is specific to order  
entry and will be used nowhere else (there may be common validation  
which should be in a service program but the core is specific to order  
entry). Raw database access to files is common and should be in a  
service program but the way, or sequence, in which those routines are  
invoked is specific to order entry. Thus, it makes sense to have a  
module for OE screen handling, another for OE logic, and another for  
OE data access.
If I divide these functions into separate modules (e.g., OEDSPF,  
OEMODEL, OEDATA) and bind into a single ORDENT program then should I  
ever need to put order entry on the web I can create a new module  
(OEHTML) and then bind OEHTML, OEMODEL, OEDATA into a new program  
called OEWEB. I have immediate reuse of two existing modules neither  
of which need know anything about how the interface with the user is  
implemented.
If I do the traditional monolithic RPG program from single module with  
embedded screen and data I/O then to create the web variant I have to  
clone the single source member, rip out all the DSPF stuff, replace it  
with web stuff, deal with all the assumptions and interrelations  
caused by having MVC in the same module.
Even if I don't **know** now that I might need to reuse these modules  
in a future environment, by separating according to MVC I make my code  
more reusable than it might otherwise be. The cost of doing so is a  
minor increase in complexity and a significant increase in design  
effort, both of which are far outweighed by the flexibility inherent  
in such an approach.
I could package at least some of the modules in a service program  
instead of bind-by-copy and I may choose to do so depending on how I  
envisage it being used. It makes no real difference to this  
discussion--you still have separate modules implementing a given  
process.
You (and others) may not agree with me but as anyone who has seen my  
past comments knows I don't really care about that. I have outlined a  
valid reason for using multiple modules in a single object which  
addressed your original comment that you could not "think of a  
situation where (you) would want to create a program using multiple  
*MODULE".
Regards,
Simon Coulter.
--------------------------------------------------------------------
   FlyByNight Software         OS/400, i5/OS Technical Specialists
   
http://www.flybynight.com.au/
   Phone: +61 2 6657 8251   Mobile: +61 0411 091 400        /"\
   Fax:   +61 2 6657 8251                                   \ /
                                                             X
                 ASCII Ribbon campaign against HTML E-Mail  / \
--------------------------------------------------------------------
 
As an Amazon Associate we earn from qualifying purchases.