I think that design is fine.  I use a similar approach, except that my
POJOs are a combination of entity objects + dataaccess method, i.e.
each class has a getList() method that returns a list of all known
instances of that type.  I chose that approach because these were
POJOs written explicitly with Flex in mind, since this was a new
project with no existing codebase to work from.  It's entirely up to
you how much separation you want between data access and the objects
themselves.

A case where you might be forced to use a facade class is when you
have a private member that is determined dynamically in code and
accessed only through a getter.  In this instance, you could write
another class that calls the first class's getter and sets a public
member variable to the results.  This new class would be what your
RemoteObject calls from Flex.


Doug

--- In [email protected], "sshriyan27" <[EMAIL PROTECTED]> wrote:
>
> Thanks Doug,
> Now i understand. Let me ask you a question then, my design consists 
> of 2 parts, i have entity objects and dataaccess objects, each time 
> i do a method call in dataaccess obj and it returns either a 
> collection of entity objects or single entity objects to client.
> 
> Is this a right way to do or should i use some facade patterns, what 
> do you think, since i'm coming struts background it's kind of 
> learning curve for me using flex. I'm not using any EJB's for our 
> application. It's a simple 3 tier arch.
> 
> thanks
> 
> 
> 
> 
> --- In [email protected], "douglowder" <douglowder@> 
> wrote:
> >
> > It isn't a case of need.  One reason you might *want* to have 
> public
> > members in your POJO is for convenience.  Flex will automatically
> > handle conversion of Java strings (as well as several other types;
> > check the documentation) to actionscript, so if your RemoteObject
> > returns a collection of POJOs with public String members you can 
> plug
> > that list directly into a grid's dataprovider without any extra
> > actionscript code.  This would correspond to collections of ClassA 
> and
> > ClassB objects, which map nicely to what dataProviders expect.  You
> > cannot, however, pass a list of Class1 POJOs and expect the 
> datagrid
> > to display Class1.ClassA.A1, Class1.ClassB.B1, etc., without doing
> > some extra work on the actionscript side.  See the difference?
> > 
> > Now, this doesn't mean you *have* to do things either one way or
> > another.  I'm just trying to explain what I personally think is the
> > easiest way to get POJO data into a dataGrid in Flex.  If this 
> still
> > isn't clear, let me know and I'll try to provide some working code.
> > 
> > Hope that helps!
> > 
> > Doug
> > 
> > --- In [email protected], "sshriyan27" <sshriyan27@> 
> wrote:
> > >
> > > Thanks guys for helping me out here, but still i don't 
> understand 
> > > why should i need to have public members firstname,lastname etc 
> in 
> > > the CloserResultsForm form, isn't it involves redundancy and 
> hard to 
> > > maintain lots of member variables. 
> > > 
> > > all i want is this,
> > > 
> > > Class1 instanciate class A, class B, Class A has member 
> variables 
> > > A1,A2 and Class B has B1,B2 etc,
> > > if i want to display A1, B1 values using Class1, 
> > > i should be saying classA.A1,classA.A2, ClassB.B1, ClassB.B2 etc,
> > > i don't want to declare A1,A2 in Class1 again in 2 palces.
> > > Am i missing something here about my design pattern? May be i'm 
> > > confused.
> > > Pls help me soon.
> > > 
> > > --- In [email protected], "douglowder" <douglowder@> 
> > > wrote:
> > > >
> > > > You're almost there!  What you want is for CloserDataAccess to 
> > > return
> > > > a list of objects that contain firstname and lastname 
> properties. 
> > > > What you have now is a list of objects that contain other 
> objects 
> > > (the
> > > > UserProfileForms), which then contain firstname and lastname.
> > > > 
> > > > If your CloserResultsForm java class had public members 
> firstname 
> > > and
> > > > lastname, initialized by calling the proper getters from
> > > > UserProfileForm, your datagrid should work.  This wouldn't even
> > > > require the separate ActionScript classes for 
> CloserResultsForm and
> > > > UserProfileForm.
> > > > 
> > > > 
> > > > Doug
> > > > 
> > > > 
> > > > --- In [email protected], "sshriyan27" 
> <[EMAIL PROTECTED]> 
> > > wrote:
> > > > >
> > > > > Thanks but still not working i made them private now.
> > > > > I'm totally lost with action script and object mapping.
> > > > > Do i need to use action script for the value objects i have, 
> if 
> > > that 
> > > > > so is there any easy way to write action scripts same as the 
> > > java 
> > > > > objects. 
> > > > > 
> > > > > 
> > > > > <mx:Application 
> xmlns:mx="http://www.macromedia.com/2003/mxml"; 
> > > > > initialize="initApp()" xmlns:i2view="view" pageTitle="Test 
> > > > > Application">
> > > > >       
> > > > >  <mx:Script>
> > > > >   import src.com.flex.form.*;
> > > > >   
> > > > >   var users: Array;
> > > > >   var upForm: UserProfileForm;
> > > > >   var closerResultsForm: CloserResultsForm;
> > > > >   var userList: Array;
> > > > >   var resultList: Array;
> > > > >   
> > > > >         function initApp() {
> > > > >                ro.getResults(); // returns 
> CloserResultsForm as a 
> > > > > collection
> > > > >                  
> > > > >       }
> > > > > 
> > > > >         function getUserList_result(event) {
> > > > >             userList=event.result;
> > > > >       }
> > > > >               
> > > > >       function getResultList_result(event) {
> > > > >            resultList=event.result;
> > > > >                  
> > > > >         }
> > > > >        
> > > > > 
> > > > > </mx:Script>
> > > > >  
> > > > >  <mx:RemoteObject id="ro" 
> > > > > source="com.chl.dataaccess.CloserDataAccess">
> > > > >     <mx:method name="getResults" result="getResultList_result
> > > > > (event)"/> 
> > > > > </mx:RemoteObject>
> > > > >  
> > > > > <mx:DataGrid id="dg" dataProvider="{resultList}" 
> width="838"  
> > > > > editable="true" showHeaders="true">
> > > > >             <mx:columns>
> > > > >               <mx:Array>  
> > > > >                 <mx:DataGridColumn columnName="firstname" 
> > > > > headerText="Firstname"/>
> > > > >                 <mx:DataGridColumn columnName="lastname" 
> > > > > headerText="Lastname"/>
> > > > >               </mx:Array> 
> > > > >           </mx:columns>        
> > > > > </mx:DataGrid>
> > > > > 
> > > > > 
> > > > > ** This is the situation i'm in now, we're going to develop 
> new 
> > > apps 
> > > > > using RIA technology, we don't have time to learn action 
> scripts 
> > > or 
> > > > > any other vedor specific scripts. so i'm trying to convince 
> that 
> > > > > flex is the best solution, but it looks like flex dev is not 
> > > rapid 
> > > > > as what i saw from demo, still lots of manual coding has to 
> be 
> > > done. 
> > > > > May be i'm not understanding fully about flex.
> > > > > 
> > > > > So can you guys tell me whether i should use flex or 
> coldfushion 
> > > or 
> > > > > ajax with struts as i did before.
> > > > >  
> > > > > Thanks
> > > > > 
> > > > > 
> > > > > --- In [email protected], "douglowder" 
> > > <[EMAIL PROTECTED]> 
> > > > > wrote:
> > > > > >
> > > > > > Ah, it looks like you have taken both my *and* Dave's 
> advice, 
> > > when 
> > > > > you
> > > > > > really only needed to do one or the other.  So, if you 
> don't 
> > > have a
> > > > > > problem with making your firstname and lastname variables 
> > > public in
> > > > > > your UserProfileForm POJO (which you might, since it kind 
> of 
> > > > > defeats
> > > > > > the purpose of getters and setters), then just pass your 
> > > datagrid a
> > > > > > collection of UserProfileForms:
> > > > > > 
> > > > > >    <mx:DataGrid dataProvider="{myUserProfileFormCollection
> }" />
> > > > > > 
> > > > > > This will display the entire object in the datagrid.  If 
> you 
> > > only 
> > > > > want
> > > > > > to see certain fields, or want to specify a specific 
> order, 
> > > define
> > > > > > columns for the datagrid like so:
> > > > > > 
> > > > > >    <mx:DataGrid dataProvider="{myUserProfileFormCollection
> }">
> > > > > >         <mx:columns>
> > > > > >             <mx:Array>
> > > > > >                 <mx:DataGridColumn columnName="firstname"
> > > > > > headerText="First Name"/>
> > > > > >                 <mx:DataGridColumn columnName="lastname"
> > > > > > headerText="Last Name"/>
> > > > > >             </mx:Array>
> > > > > >         </mx:columns>
> > > > > >    </mx:DataGrid>
> > > > > > 
> > > > > > If, however, you want to keep the members variables of 
> your 
> > > objects
> > > > > > hidden and provide access only through getters and 
> setters, 
> > > then
> > > > > > change the declarations back to private and follow Dave's 
> > > advice.
> > > > > > 
> > > > > > I hope that helps!
> > > > > > 
> > > > > > Doug
> > > > > > 
> > > > > > --- In [email protected], "sshriyan27" 
> > > <[EMAIL PROTECTED]> 
> > > > > wrote:
> > > > > > >
> > > > > > > Let me send you all my classes, i don't still 
> understand! 
> > > Thanks 
> > > > > for 
> > > > > > > your help anyway.
> > > > > > >  
> > > > > > > public class UserProfileForm {
> > > > > > > 
> > > > > > >   public String firstname=null;
> > > > > > >   public String lastname=null;
> > > > > > >    
> > > > > > >         public UserProfileForm(){}
> > > > > > > 
> > > > > > >   public String getFirstname() {
> > > > > > >           return firstname;
> > > > > > >   }        
> > > > > > >   public void setFirstname(String firstname) {
> > > > > > >           this.firstname = firstname;
> > > > > > >   }
> > > > > > >   public String getLastname() {
> > > > > > >           return lastname;
> > > > > > >   }
> > > > > > >   public void setLastname(String lastname) {
> > > > > > >           this.lastname = lastname;
> > > > > > >   }
> > > > > > >    
> > > > > > > }
> > > > > > > 
> > > > > > > public class CloserResultsForm implements Serializable{
> > > > > > >   public UserProfileForm userProfileForm;
> > > > > > >   
> > > > > > >   public CloserResultsForm(){
> > > > > > >     userProfileForm=new UserProfileForm();
> > > > > > >   }
> > > > > > >   public UserProfileForm getUserProfileForm() {
> > > > > > >           return userProfileForm;
> > > > > > >   }
> > > > > > >   public void setUserProfileForm(UserProfileForm 
> > > > > > > userProfileForm) {
> > > > > > >           this.userProfileForm = userProfileForm;
> > > > > > >   }
> > > > > > >   
> > > > > > > }
> > > > > > > 
> > > > > > > ** my dataaccess returns collection of CloserResultsForm 
> > > > > > > 
> > > > > > > CloserResultsForm.as file
> > > > > > > class src.com.flex.form.CloserResultsForm{
> > > > > > >   public var userProfileForm : UserProfileForm;
> > > > > > >   
> > > > > > >   static var registered=Object.registerClass
> > > > > > > ("com.chl.form.CloserResultsForm", 
> > > > > > > src.com.flex.form.CloserResultsForm);
> > > > > > >    
> > > > > > >     public function CloserResultsForm(){
> > > > > > >             this.userProfileForm=new UserProfileForm();
> > > > > > >     }
> > > > > > > }
> > > > > > > 
> > > > > > > UserProfileForm.as file
> > > > > > > class src.com.flex.form.UserProfileForm{
> > > > > > >   public  var firstname:String;
> > > > > > >     public  var lastname:String;
> > > > > > >   public var _remoteClass;
> > > > > > >     static var registered=Object.registerClass
> > > > > > > ("com.chl.form.UserProfileForm", 
> > > > > src.com.flex.form.UserProfileForm);
> > > > > > >            
> > > > > > > } 
> > > > > > > 
> > > > > > > How do i print the firstname and lastname in datagrid, 
> am i 
> > > > > missing 
> > > > > > > something here.
> > > > > > > 
> > > > > > > --- In [email protected], "Dave Wolf" 
> > > <[EMAIL PROTECTED]> 
> > > > > wrote:
> > > > > > > >
> > > > > > > > Ahh yes, the same J2EE struggles with property 
> setting.  
> > > As 
> > > > > Doug 
> > > > > > > says
> > > > > > > > you do not want to be calling a million setters on a 
> > > remote 
> > > > > object.
> > > > > > > > You are better off refactoring this to either create a 
> new 
> > > > > Value
> > > > > > > > Object, or to treat your existing class itself as a 
> value 
> > > > > object.  
> > > > > > > > 
> > > > > > > > So rather then getting a remote reference to say 
> > > > > UserProfileForm, 
> > > > > > > then
> > > > > > > > calling a million getters and setters, I would create 
> a 
> > > POJO 
> > > > > which
> > > > > > > > returns the UserProfileForm as a return type.  Then 
> call 
> > > all 
> > > > > your
> > > > > > > > setters locally, and pass it back up to the server as 
> the 
> > > > > > > parameter to
> > > > > > > > another POJO method call.
> > > > > > > > 
> > > > > > > > The second option is to add a new Value Object 
> property to 
> > > the
> > > > > > > > UserProfileForm.  Again create the stub, call all the 
> > > setters 
> > > > > on 
> > > > > > > the
> > > > > > > > local value object, then call one call on the 
> > > UserProfileForm 
> > > > > to
> > > > > > > > return this coarsly grained Value Object.
> > > > > > > > 
> > > > > > > > You need to keep network calls in mind in your 
> > > architecture.  
> > > > > > > There is
> > > > > > > > a graveyard filled with failed J2EE projects who 
> ignored 
> > > the 
> > > > > > > network
> > > > > > > > and the effects of not architecting around seriously 
> > > reducing 
> > > > > the
> > > > > > > > number and size of remote calls.
> > > > > > > > 
> > > > > > > > -- 
> > > > > > > > Dave Wolf
> > > > > > > > Cynergy Systems, Inc.
> > > > > > > > Macromedia Flex Alliance Partner
> > > > > > > > http://www.cynergysystems.com
> > > > > > > > 
> > > > > > > > Email:  [EMAIL PROTECTED]
> > > > > > > > Office: 866-CYNERGY
> > > > > > > > 
> > > > > > > > 
> > > > > > > > --- In [email protected], "douglowder" 
> > > > > <[EMAIL PROTECTED]> 
> > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > Flex 1.5 does a pretty good job of automatically 
> > > translating 
> > > > > > > Java 
> > > > > > > > > types to ActionScript, but only for members that are 
> > > > > declared 
> > > > > > > > > public, not private.  So, if you want to continue 
> using 
> > > your 
> > > > > > > getter 
> > > > > > > > > routines for private members in your existing 
> classes, 
> > > be 
> > > > > > > prepared 
> > > > > > > > > to make a lot of calls to your remote object.  You 
> could 
> > > > > also 
> > > > > > > create 
> > > > > > > > > a new "facade" Java class for mapping purposes, 
> which 
> > > would 
> > > > > have 
> > > > > > > > > public members for all the variables you want to 
> expose 
> > > to 
> > > > > > > > > ActionScript, and have that class make all the calls 
> to 
> > > your 
> > > > > > > > > existing class's getters to initialize those public 
> > > > > members.  
> > > > > > > You 
> > > > > > > > > can then refer to the variables by name (the same 
> name 
> > > as in 
> > > > > the 
> > > > > > > > > Java class) from within ActionScript.
> > > > > > > > > 
> > > > > > > > > Another thing to keep in mind is that datagrids 
> expect 
> > > to be 
> > > > > > > passed 
> > > > > > > > > arrays (actually, anything that implements the 
> > > DataProvider 
> > > > > > > > > interface) of objects, not a single object.  If your 
> > > Java 
> > > > > calls 
> > > > > > > are 
> > > > > > > > > returning a single object instead of a list of 
> objects, 
> > > use 
> > > > > > > > > mx.utils.ArrayUtil.toArray() on the result to 
> convert it 
> > > to 
> > > > > an 
> > > > > > > array 
> > > > > > > > > in ActionScript.
> > > > > > > > > 
> > > > > > > > > Doug
> > > > > > > > > 
> > > > > > > > > 
> > > > > > > > > --- In [email protected], "sshriyan27" 
> > > > > > > <[EMAIL PROTECTED]> 
> > > > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > I'm new to Flex we're trying evaluate in our 
> company 
> > > > > whether 
> > > > > > > we 
> > > > > > > > > > should use FLEX or not. Right we have Java, Struts 
> > > based 
> > > > > > > > > application.
> > > > > > > > > > 
> > > > > > > > > > I have a simple question, i have an Object and 
> still 
> > > > > strugling 
> > > > > > > to 
> > > > > > > > > > map that to an action script and datagrid.
> > > > > > > > > > How do i display values of UserProfileForm in 
> > > datagrid, 
> > > > > like 
> > > > > > > in 
> > > > > > > > > > Struts i used to do  
> > > > > > > CloserResultsForm.userProfileForm.firstname
> > > > > > > > > (); 
> > > > > > > > > > Can some one explain this to me. 
> > > > > > > > > > ** I can get the Single object to get displayed 
> but 
> > > not 
> > > > > the 
> > > > > > > > > > inhertited ones.
> > > > > > > > > > 
> > > > > > > > > > public class CloserResultsForm implements 
> Serializable{
> > > > > > > > > >     private UserProfileForm userProfileForm;
> > > > > > > > > > }
> > > > > > > > > > 
> > > > > > > > > > public class UserProfileForm {
> > > > > > > > > >     private String username=null;
> > > > > > > > > >     private int userid;
> > > > > > > > > >     private String password=null;
> > > > > > > > > >     private String firstname=null;
> > > > > > > > > >     private String lastname=null;
> > > > > > > > > >     private String roleName=null;
> > > > > > > > > >      
> > > > > > > > > >     public UserProfileForm(){
> > > > > > > > > >              
> > > > > > > > > >     }
> > > > > > > > > >  .... // then getters and setters for the above
> > > > > > > > > > }
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>







--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 



Reply via email to