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 <[EMAIL PROTECTED]> 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

Reply via email to