You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Marcus <mv...@gmail.com> on 2007/05/16 04:31:49 UTC

T5 - Which is the better approach?

Hi,

Which is the better approach, or which is the main difference?

Have a service to do Login validation, like:
================
in AppModule.java
public static IUserAuthenticator buildUserAuthenticator()
{
   return new UserAuthenticatorImpl();
}

IUserAuthenticator.java
package org.example.hilo.services.interfaces;
public interface IUserAuthenticator
{
   public boolean isValid(String userName, String pwd);
}

UserAuthenticatorImpl.java
package org.example.hilo.services;
import org.example.hilo.services.interfaces.IUserAuthenticator;
public class UserAuthenticatorImpl implements IUserAuthenticator
{
   public boolean isValid(String userName, String pwd)
   {
      if (userName.equalsIgnoreCase(pwd))
      {   return true;   }
      return false;
   }
}

in Login.java
@Inject
private IUserAuthenticator _authenticator;
public String onSuccess()
{
   if (!_authenticator.isValid(_userName, _password))
   {
      _form.recordError(_passwordField, "Invalid user name or password.");
      return null;
   }
   return "Start";
}
================

or have a class to do that, like:
================
UserAuthenticator.java
package org.example.hilo.beans;
public class UserAuthenticator
{
   public boolean isValid(String userName, String pwd)
   {
      if (userName.equalsIgnoreCase(pwd))
      {   return true;   }
      return false;
   }
}

in Login.java
@Inject
private UserAuthenticator _authenticator;
String onSuccess()
{
   if (!_authenticator.isValid(_userName, _password))
   {
      _form.recordError(_passwordField, "Invalid user name or password.");
      return null;
   }
   return "Start";
}

Thank's
Marcus


Related Links:
http://tapestry.apache.org/tapestry5/tapestry-core/index.html
http://elozovan.blogspot.com/2007/05/simpletapestry-5-crud-application-step.html

Re: T5 - Which is the better approach?

Posted by Marcus <mv...@gmail.com>.
Thank you Howard!

Re: T5 - Which is the better approach?

Posted by Howard Lewis Ship <hl...@gmail.com>.
It depends on whether you want to test or not.

If you inject UserAuthenticator as a class, you're locked into one
implementation of UserAuthenticator.  You forgoe the ability to unit test
using EasyMock (or jMock) because you aren't coding to an interface, but to
a class. Sure, EasyMock has an extention that lets you mock objects, but it
has unexpected limitations.  I aways code to an interface, almost
reflexively.

Further, T5 IoC service defined in terms of a class is not proxied: it is
realized on first reference (not on first use) and can't be decorated with
interceptors.  There goes easy logging and maybe other desired behaviors in
the future.

On 5/15/07, Marcus <mv...@gmail.com> wrote:
>
> Hi,
>
> Which is the better approach, or which is the main difference?
>
> Have a service to do Login validation, like:
> ================
> in AppModule.java
> public static IUserAuthenticator buildUserAuthenticator()
> {
>    return new UserAuthenticatorImpl();
> }
>
> IUserAuthenticator.java
> package org.example.hilo.services.interfaces;
> public interface IUserAuthenticator
> {
>    public boolean isValid(String userName, String pwd);
> }
>
> UserAuthenticatorImpl.java
> package org.example.hilo.services;
> import org.example.hilo.services.interfaces.IUserAuthenticator;
> public class UserAuthenticatorImpl implements IUserAuthenticator
> {
>    public boolean isValid(String userName, String pwd)
>    {
>       if (userName.equalsIgnoreCase(pwd))
>       {   return true;   }
>       return false;
>    }
> }
>
> in Login.java
> @Inject
> private IUserAuthenticator _authenticator;
> public String onSuccess()
> {
>    if (!_authenticator.isValid(_userName, _password))
>    {
>       _form.recordError(_passwordField, "Invalid user name or password.");
>       return null;
>    }
>    return "Start";
> }
> ================
>
> or have a class to do that, like:
> ================
> UserAuthenticator.java
> package org.example.hilo.beans;
> public class UserAuthenticator
> {
>    public boolean isValid(String userName, String pwd)
>    {
>       if (userName.equalsIgnoreCase(pwd))
>       {   return true;   }
>       return false;
>    }
> }
>
> in Login.java
> @Inject
> private UserAuthenticator _authenticator;
> String onSuccess()
> {
>    if (!_authenticator.isValid(_userName, _password))
>    {
>       _form.recordError(_passwordField, "Invalid user name or password.");
>       return null;
>    }
>    return "Start";
> }
>
> Thank's
> Marcus
>
>
> Related Links:
> http://tapestry.apache.org/tapestry5/tapestry-core/index.html
>
> http://elozovan.blogspot.com/2007/05/simpletapestry-5-crud-application-step.html
>



-- 
Howard M. Lewis Ship
TWD Consulting, Inc.
Independent J2EE / Open-Source Java Consultant
Creator and PMC Chair, Apache Tapestry
Creator, Apache HiveMind

Professional Tapestry training, mentoring, support
and project work.  http://howardlewisship.com