Subject: Re: Value object doubt !!! From: Vic C <[EMAIL PROTECTED]> === Fat fingered "do not look at" http://www.softwarereality.com/programming/ejb/EJB_101Damnations.pdf
Vic Cekvenich wrote: > STEVE WILKINSON wrote: > 2 each his own. I understand you view on EJB's and would apprechiate if > you keep that on your site and don't put that here. > > Should I say do not look at > http://www.bad-managers.com/Features*/ejb/i*ndex.shtml ? > Not sure how to respond to this. EJB's is something I used in the > model; and now I don't. You don't think people should be exposed as > to why that is? Certainly new users and new managers should be aware > that you can do MVC and J2EE without EJB and at least some feel that > this is better. My guess is EJBs are going to go the way of the > client side Java, that is to say, they will not be used. I predict > that the silent majority used to use EJB's and don't use EJB anymore > and very soon that will be conventional wisdom not to use EJB. I > would say people that argue EJB is good lose some credibility with > me (and you could say people that argue EJB are not good lose > credibility with you. 2 each his own) I do ask for comments on > http://www.bad-managers.com/Features/ejb/index.shtml here or at > mvc-programmers. > > > We are using the EJB technology, but we also use DataAccessObjects > (DAO), the problem is that the data in the database is needed by both > web clients and other interfaces, XML/SOAP, and Java Swing Clients. We > are using the transformation process strickly on the web tier to > eliminate some of the manual coding within the Action class. We have > JUnit tests for Form Beans and ValueObjects (DTO) to remind us that when > we update one we need to update the other. > > :-\ , You can look at a post in the mvc-programmers news group on > how it is benefitial to have a single model beans for use by SOAP, > Swing, etc. > > > I'm just trying to give someone a peek at how we are planning on doing > that. > > > It looked like a question. > > > > > If you have "been there done, done that, got the T-shirt" I would be > interested in hearing how you did the conversion from ValueObject (DTO) > to FormBean and return. > > I have a post of the code on the strutsplus.com home page. Again, > feel free to comment on the implemented design. > > > To the newbies, you don't want to sub-class a mixed type object within a > FormBean because of validation issues that Craig covered in prior posts. > If you want to do it automatically in a layered tier, I've described an > approach that we are trying. > > ?? > > > > > I by not way mean to imply this is the best way or the only way. If you > want an option there are plenty on this list to provide it. > > BTW, it's Friday. > > I just need not to look at this list on Fridays. ;-) > Vic > > >> >> >>> From: Struts Newsgroup (@Basebeans.com) <[EMAIL PROTECTED]> >>> Reply-To: "Struts Users Mailing List" <[EMAIL PROTECTED]> >>> To: [EMAIL PROTECTED] >>> Subject: Re: Value object doubt !!! >>> Date: Fri, 24 May 2002 08:10:02 -0700 >>> >>> Subject: Re: Value object doubt !!! >>> From: Vic C <[EMAIL PROTECTED]> >>> === >>> Been there done that, got the T-Shirt. I used to do the same thing. >>> And I found a simpler, better approach and have a tested production >>> designs and fully functional sample code to show! Other designs are not >>> showing fully functional code. >>> I do project recovery for a living. >>> For your consideration: >>> >>> Craig support light weight frameworks MVC I think and not forcing people >>> to do things one way.(Are you using EJB? How are you addressing some of >>> the issues in Software Reality EJB 101 that I and others found?) >>> I hope to persuade Craig and others one way to look at a practical and >>> simple and light weight alternative for model direction. I think it all >>> stems from the old discussion of should form beans be a base class or an >>> interface. (I think one of the reasons for Struts success is that it is >>> light weight, simple and practical). >>> >>> The point of using a framework it to use it, and not build a framework. >>> Analogy I use it you can wake up in the morning and drive a car, or go >>> under the car and thinker with the combustion engine and the brakes. No >>> need to mess with the technology. Use the force Luke, to make your >>> project more productive. >>> >>> The larger the project the more the risk, so use Struts and don't do >>> technology. ValueObject are just another bean. Transformation helper? >>> You will get lost in the woods. >>> >>> Based on WebPIM from home page of StrutsPlus.com: >>> Here is a repost on an alterntative design for your consideration, >>> repost from news.strutsplus.com: >>> >>> [EMAIL PROTECTED] >>> > Inline: >>> > >>> > > Rick Reumann wrote: >>> > > I'm still new to trying to comprehend the various ways the Model >>> layer >>> > > can be implemented in a J2EE app, so I want to make sure I'm >>> > > understanding a few things in relation to the webPIM sample app at >>> > > www.basebeans.com. >>> > >>> > It is possible to use J2EE without EJB and it is possible and >>> desirable >>> > to use MVC with a less complexity. (No need for Business objects or >>> > Value Objects in some cases, if they do nothing for you if only a DAO >>> > would do). Doing things right means more scalability and faster to >>> > develop with less effort. >>> > >>> > > 1) I was under the impression that you want to have your Data >>> Transfer >>> > > Objects (or Value Objects) to be as reusable as possible. It looks >>> > > like in the case of the webPIM app that a typical bean (ie >>> NameLstBean >>> > > ) is tightly coupled with the table columns found in the DAO that >>> the >>> > > bean has as a member. >>> > >>> > Nope. This is a form bean; it should reflect the page properties, not >>> > the physical data model. The bean is bound to the presentation. How >>> the >>> > physical DB does not matter to the public interface of the bean. >>> > Idea here is that a requriment or html page would be the spec. You >>> would >>> > create a bean that follows it logicaly, with getters and setters >>> > matching page properties. >>> > (What confused you is the physical data model design, which a good >>> > design follows the outputs and uses of the web app.) >>> > So: Bean maps to the page logically. It hides the physical >>> > implementation inside of it. Changes to the data model do affect the >>> > implementation but not the "use" of the bean. >>> > (Complex example: A bean getter could call another beans getter or >>> > setter so you can have a bean that contains other beans for a complex >>> page) >>> > >>> > >>> > > The design seems to be: call a populate method >>> > > on a particular bean which in turn will return a DAO to the bean >>> that >>> > > contains a cached rowset of the columns returned from the query. >>> Then >>> > > in order to get back say a First Name the bean will actually get a >>> > > handle to the DAO stored in the bean and then call a method like >>> > > nameLstDAO.getCRString("first_name"). (Forgive me Vic if I explained >>> > > that all wrong ). >>> > >>> > You got it. Very simple delegation. You can unit test the beans CRUD, >>> > and properties before you ever use it. And you can later make the >>> beans >>> > soapy. >>> > >>> > >>> > > So my question is under this model it seems like if >>> > > the underlying implementation changes, such as the column names in a >>> > > table change, you end up having to fix all your beans plus all of >>> your >>> > > DAOs (as opposed to only having to change it one place if the >>> DAOs are >>> > > used to directly populate the beans). >>> > >>> > The public interface of the bean stays the same. So the users of the >>> > data model layer are not affected. The whole point of separating the >>> > data layer is that if it changes, the other 2 layers are unaffected. >>> > You would only fix the implementation of the bean or the dao that has >>> > the changed table. Of course once you have data in the DB, you would >>> > with the changed db have to do data conversion, so changes to the >>> > physical db are very rare. >>> > More realistic is that you would add a column or maybe a table, and >>> add >>> > a bean or a bean property. >>> > >>> > > I'm guessing the reason for >>> > > calling the db columns in the cached rowset might be so that the >>> bean >>> > > doesn't have to be populated in the DAO (although I'm not so sure >>> why >>> > > that would be so negative ). >>> > >>> > DAO does retrieve and store in a disconnected row set. It just >>> holds it >>> > there. >>> > >>> > >>> > > >>> > > 2) If each bean ( ie ListNmBean ) is responsible for populating >>> itself >>> > > where do you put SQL to populate a Collection of beans? ( I >>> apologize >>> > > Vic if you do this somewhere in the application that I haven't >>> found). >>> > > In your architecture it looks like the DAOs are only really called >>> > > from within beans themselves, so in order to get a Collection of >>> > > ListNmBeans would I need to create a CollectionOfNameBeans object >>> > > which would call a DAO that would populate me with ListNmBeans? >>> > > >>> > >>> > That's the beauty. Most retrievals are multi row. The DAO has the ( >>> > disconnected ) rowset. The rowset is your "collection" of rows. (No >>> need >>> > for a collection, when the rowset has the full metadata and is >>> > disconnected) It contains multiple rows (no need for multiple beans >>> and >>> > garbage collection load). The Bean has iterate. It iterates the DAO >>> ('s >>> > rowset). Multi row retrievals like nameLst or multi row updates are a >>> > synch. and easily unit testable at the bean level (with not web app >>> > needed to unit test, the whole point of unit test it to test one >>> thing). >>> > >>> > >>> > > 3) Using an architecture such as the webPIM app it looks like you >>> > > would only need one type of bean to hold your main object's fields. >>> > > For example I'd only need an EmployeeBean, and wouldn't need an >>> > > EmployeeBean plus a Data Transfer Object EmployeeBean. >>> > >>> > Yes. KISS >>> > >>> > > In the webPIM >>> > > app am I correct in assuming objects such as the NameLstBean act >>> as a >>> > > Data Transfer Object or Value Object and also acts as what I hear >>> > > other's mention as an Entity or Session bean? >>> > >>> > Value Object and Data Transfer Object and Business Objects are just >>> > Beans. The less you do, the faster you write it, the less code, the >>> less >>> > has to go trough CPU, the less code, the less bugs, less GC. Benefits >>> > pile on. Plus easier to debug. >>> > >>> > EJBs (and design patterns to try to make them palatable) is >>> something I >>> > r USED TO USE, but I do not use them anymore (in fact my new and >>> > existing clients that might have them are having the EJBs removed). >>> You >>> > do not need EJB to do J2EE. Look at some of my post about software >>> > reality . com and the first 101 reasons not to use EJB. EJB only >>> work in >>> > lab conditions and most organizations remove them eventually. EJB is a >>> > technology in search of a problem. >>> > >>> > >>> > > >>> > > 4) I take it each bean would contain all different overloaded >>> populate >>> > > methods for different ways you would want to return an Employee? For >>> > > example "populate( int employeeId )" or "populate( String firstName, >>> > > String Last Name )" ? >>> > >>> > Yup. >>> > Do you see how simple this design is? (especially compare to pet store >>> > type designs) >>> > A bean and a DAO (DAO with a "collection" of rows") >>> > It is always better to look at a real application and code. >>> > Most clients can be talked into removing EJB and other objects they do >>> > not use, if it is helpful to them. >>> > Simple = flexible = less effort. >>> > >>> > Actually, anyone can build a web app. But a software engineer can help >>> > you use less resources and effort and make it more scalable and >>> > maintainable. >>> > >>> > Hth, V. >>> > >>> >> >>> >> >>> >> Thanks for any help with this. >>> >> >>> >>> >>> >>> >>> >>> STEVE WILKINSON wrote: >>> > Given the comments from Craig on not using Value Objects as form beans >>> > our project is taking the following approach. >>> > >>> > We are creating a "helper" class to transform our ValueObject (Data >>> > Transfer Object as we call it) into a form bean (Strings, Boolean, and >>> > boolean types only) and the reverse. I started this effort by looking >>> > at the code within the beanutil package that is part of commons. >>> > Unfortunately, object composition is not supported (User object >>> contains >>> > an Address object) within the commons code base. So, I've taken to >>> > writing our own transformation helper and take advantage reflection >>> and >>> > the convertion utilities provided in the commons package. Granted this >>> > is not an approach that a small project should take, but ours is a >>> > fairly large project and we wanted to create a "Helper class" to >>> assist >>> > in transforming the data between tiers. The idea is that each >>> interface >>> > (Struts being the HTTP interface) will have it's own helper class to >>> > assist in this. I will reduce a little coding, but provide easy >>> > tranformation of the data between tiers. >>> > >>> > Currently, the transformation helper class is dependent on our own >>> > package structure. :-( I'm hoping to be able to refactor this so that >>> > it's configurable like the ConvertUtils does and I'll offer it up if >>> > people are >>> > interested. Also, since we are only prototyping right now, I don't >>> > provide support for Collections, but I do provide support for Object >>> > Array types (e.g. User[] user). The intent is to provide Collection >>> > support in the future, but I must utilize a "type safe" collection >>> that >>> > is initalized with "type" or it's class that will be stored at >>> > initialization in the target object so the transformation utility >>> knows >>> > what class to create when transforming an object from one >>> collection to >>> > the other. We are using the same names for our attributes and classes, >>> > it's just different data types. The DTO (VO) contains mixed type, >>> > java.sql.Date, java.lang.Float, etc. The FormBean >>> > currently only has String, Boolean and boolean types. >>> > >>> > Hope this helps give an idea on another approach. >>> > >>> > Steve >>> > >>> > >>> > >>> >> From: Ted Husted <[EMAIL PROTECTED]> >>> >> Reply-To: [EMAIL PROTECTED] >>> >> To: Struts Users Mailing List <[EMAIL PROTECTED]> >>> >> Subject: Re: Value object doubt !!! >>> >> Date: Fri, 24 May 2002 08:47:27 -0400 >>> >> >>> >> The best stategy will depend on what else is going on with your >>> >> application. >>> >> >>> >> The ActionForm is really part of the control layer and so can >>> interact >>> >> with objects on both the presentation and business layers. >>> >> >>> >> A generally useful approach is to put a factory method on the >>> ActionForm >>> >> that returns your value object. >>> >> >>> >> This neatly encapsulates the data transfer. All the Action has to >>> do is >>> >> call the method and pass along the result. >>> >> >>> >> Which I guess is your #2. >>> >> >>> >> -- Ted Husted, Husted dot Com, Fairport NY US >>> >> -- Developing Java Web Applications with Struts >>> >> -- Tel: +1 585 737-3463 >>> >> -- Web: http://husted.com/about/services >>> >> >>> >> >>> >> Radhika Nadkarni wrote: >>> >> > >>> >> > hi, >>> >> > Im having an action Form. Im using Value object for data >>> conversions. >>> >> > Now my problem is i have two scenarios for implementing the same >>> : - >>> >> > 1) Value object will be separate >>> >> > 2) Value object will be composed within the Form Bean. >>> >> > Can anyone tell me which is the best strategy out of the two ? >>> >> > >>> >> > _________________________________________________________________ >>> >> > Get your FREE download of MSN Explorer at >>> >> http://explorer.msn.com/intl.asp. >>> >> > >>> >> > -- >>> >> > To unsubscribe, e-mail: >>> >> <mailto:[EMAIL PROTECTED]> >>> >> > For additional commands, e-mail: >>> >> <mailto:[EMAIL PROTECTED]> >>> >> >>> >> -- >>> >> To unsubscribe, e-mail: >>> >> <mailto:[EMAIL PROTECTED]> >>> >> For additional commands, e-mail: >>> >> <mailto:[EMAIL PROTECTED]> >>> >> >>> > >>> > >>> > _________________________________________________________________ >>> > Chat with friends online, try MSN Messenger: http://messenger.msn.com >>> > >>> > >>> > -- >>> > To unsubscribe, e-mail: >>> > <mailto:[EMAIL PROTECTED]> >>> > For additional commands, e-mail: >>> > <mailto:[EMAIL PROTECTED]> >>> > >>> >>> >>> -- >>> To unsubscribe, e-mail: >>> <mailto:[EMAIL PROTECTED]> >>> For additional commands, e-mail: >>> <mailto:[EMAIL PROTECTED]> >>> >> >> >> _________________________________________________________________ >> Join the world's largest e-mail service with MSN Hotmail. >> http://www.hotmail.com >> >> >> -- >> To unsubscribe, e-mail: >> <mailto:[EMAIL PROTECTED]> >> For additional commands, e-mail: >> <mailto:[EMAIL PROTECTED]> >> > > > > -- > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>