File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Developer Certification (SCJD/OCMJD) and the fly likes Design Review part III Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of OCA/OCP Java SE 7 Programmer I & II Study Guide this week in the OCPJP forum!
JavaRanch » Java Forums » Certification » Developer Certification (SCJD/OCMJD)
Bookmark "Design Review part III" Watch "Design Review part III" New topic
Author

Design Review part III

Chiji Nwankwo
Ranch Hand

Joined: Jun 21, 2002
Posts: 56
Hi all,
Please go over my review and let me know any comments or critisms you might have.
NOTE: I HAVE OMITTED THE METHOD'S PARAMETERS FOR BREVITY.
suncertify.client
-----------------
public interface Agent
Provides two methods, searchFlight() and bookFlight().
public interface Administrator extends Agent
Provides two methods, addFlight() and deleteFlight().
public interface Operator extends Agent
Provides one method, confirmFlight().
public class BookingDetail
Class used to encapsulate all the details of a booking, such as flight
number, seats, booking date and status (Confirmed, Unconfirmed ...).
public class ClientLauncher
Sets the look and feel of the application and starts off the client
application.
public class FlightDetail
Class used to encapsulate all the details of a flight, such as flight number,
origin airport, destination airport, etc..
public class TravelAgency implements Operator, Administrator
Facade that implements all the business methods, such as searchFlight(),
confirmFlight(), bookFlight(), addFlight(), and deleteFlight(). A reference
of this class is returned as an Operator (see interface def above) to the
client application.


suncertify.client.ui.controller
-------------------------------
Most of the buttons and menu items contained within the GUI application are
represented by seperate actions, whose names give an indication of the role they
play. For example the 'confirm' button's interaction is handled by a 'BookAction'
instance. All the Action instances are declared external to the GUI. Most of the
action instances are passed a reference to a controller (see controller def
below)object.
public class MainController
This class serves as the controller (in the context of MVC) for the GUI
application. Its primary purpose is to create a connection between the
view and data parts of the GUI application. The presence of this class
abstracts the view from the data parts of the application. This class
contains methods which can be used to set data contained within the model.

suncertify.client.ui.model
--------------------------
public interface ClientModel
Defines all the operations that can be used to access the state of the main
GUI application. This interface is 'accessed' by the view of the GUI
application. Only accessors are provided in this interface. This is the
interface that is used by the GUI application, which means that the GUI
application (view) cannot modify the state of the model directly.
public class ClientModelEvent extends EventObject
ClientModelEvent is used to notify listeners that a client model's state has
changed.
public interface ClientModelListener extends EventListener
Defines the interface which is implemented by objects that are interested in
receiving notification changes that occur in the ClientModel object.
public class DefaultClientModel implements ClientModel
This class serves as a default implementation of the ClientModel interface,
which is used by the main GUI application. This class also provides mutators
that can be used modify the state of the model. This class is only accessed
from with the MainController class (defined above).
public class ResultsTableColumnModel extends DefaultTableColumnModel
A custom DefaultTableColumnModel implementation used by the main GUI
application.
public class ResultsTableModel extends AbstractTableModel
A custom <code> AbstractTableModel </code> implementation used by the results
table which is displayed as part of the main GUI application.

suncertify.client.ui.view
-------------------------
public class BookingDialog extends JDialog
A dialog box that is used to display all the details of a flight that has
been selected by the user. This dialog box gives the user the option to
cancel or proceed with a booking.
public class ConnectionDialog extends JDialog
This the first dialog box presented to the user when the client side of the
application starts up. The dialog has options that allow the user to specify
the name of a database, when in local mode and the host name/ip and rmi port,
when in remote mode.
public class GUIMediator
A mediator, that coordinates the interaction between most of the components
contained within the main GUI application.
public class MainView extends JFrame implements ClientModelListener
Main GUI, which is notified when a change in the model's state occurs.
public class UserGuideDialog extends JDialog
Dialog in which the user guide is displayed. This dialog is invoked by the
user guide menu item in the MainView GUI.

suncertify.db
-------------
public class Data implements DataInterface
Modified data class to provide criteriaFind() method and fixed deprecated
methods. CriteriaFind method is capable of searching for any number of
fields provided to it.
public class DatabaseException extends Exception
Unmodified except for javadoc comments.
public class DataInfo implements Serializable
Unmodified except for javadoc comments.
public interface DataInterface
Exposes methods that can be used by both local and remote applications. The
methods in this interface throw both DatabaseException and IOException.
public final class DataInterfaceFactory
This class creates and returns remote or local DataInterface implementations.
Exceptions are rethrown by this class as a custom application exception,
which is caught in the in the MainController class. The MainController class
is responsible for displaying the correct dialog box with the relevant error
message.
public class FieldInfo implements Serializable
Unmodified except for javadoc comments.

suncertify.server
-----------------
public interface DataService extends Remote, DataInterface
Interface that is exported to clients of the remote system.
public interface DataServiceFactory extends Remote
Remote object registered with the RMI registry. Contains a single method,
getDataService(), which is responsible for creating and returning DataService
instances to the client. Each client will get a unique DataService
implementation.
class DataServiceFactoryImpl extends UnicastRemoteObject implements
DataServiceFactory
A DataServiceFactory implementation responsible for creating and returning
DataService objects. This class is also responsible for creating Data and
LockManager instances and allocating them to the new created DataService
implementation. Several DataService implementations can share the same Data
and LockManager instances. Each newly created Data instance has a
corresponding LockManager instance tied to it within the DataService
implementation.
class DataServiceImpl extends UnicastRemoteObject implements DataService,
Unreferenced
A DataService implementation, exported to clients of the remote system which
is used to wrap calls made to the database file. Instances of this class,
which are created by the DataServiceFactoryImpl, contain a reference to the
LockManager and Data instances passed in from the DataServiceFactoryImpl
class. All the database file calls are delegated to the Data instance and
the lock and unlock calls are delegated to the LockManager.
class LockManager implements Runnable
Deals with concurrent database file, access issues. Provides implementations
for the lock and unlock methods. Contains an internal, daemon thread which
deals with deadlocks.
public class Server
Responsible for intialializing the server's environment, binding the remote
DataServiceFactory, object to the registry and starting the server. This
class contains a key listener, which listens out for a 'q' or 'Q' keystroke.
Either of these keystrokes can be used to stop the server application at any
time. Stopping the server will unbind any remote objects bound to the
registry and gracefully exit the application. The key listener runs in its
own, low priority, thread.
public class ServerLauncher
Starts the server side of the application. Command-line parameters are
passed to the server side of the application.
public interface Stoppable
Contains a single call back method, stop() and is implemented by classes that
will need to be stopped before the application exits. I have not included
which classes implement the stoppable interface in this review.

Thank you very much for taking the time out to go over my review.
Regards,
Chiji


SCJP, SCJD, SCWCD<br />"Meekness is not weakness, but power under control"
Chiji Nwankwo
Ranch Hand

Joined: Jun 21, 2002
Posts: 56
Please review. Thanks for your help.
BJ Grau
Ranch Hand

Joined: Jul 10, 2001
Posts: 234
Originally posted by Chiji Nwankwo:
Hi all,
Please go over my review and let me know any comments or critisms you might have.
suncertify.client
-----------------
public interface Agent
Provides two methods, searchFlight() and bookFlight().
public interface Administrator extends Agent
Provides two methods, addFlight() and deleteFlight().
public interface Operator extends Agent
Provides one method, confirmFlight().

public class TravelAgency implements Operator, Administrator
Facade that implements all the business methods, such as searchFlight(),
confirmFlight(), bookFlight(), addFlight(), and deleteFlight(). A reference
of this class is returned as an Operator (see interface def above) to the
client application.

I only had time to look at your client package, so this only pertains to client:
1) Unless your assignment requires it, you can get rid of your confirmFlight, deleteFlight, and addFlight methods.
2) It may just be a question of semantics, but I don't feel comfortable with part of your object model. In real life, is an operator really an agent? Is a Travel Agency an agent, an operator, or an administrator? A travel agency may have an agent or administrator but it surely isn't an agent or administrator. Also, when I hear operator, I think airline which does not have an is a relationship with any of the other busines entities mentioned. Anyway, I would scrap all of those interfaces and just have one business facade with methods to book flights, and search the database. Keep it simple.
-BJ
Chiji Nwankwo
Ranch Hand

Joined: Jun 21, 2002
Posts: 56
I have made a couple of changes and gotten rid of the interface hierachy from within the suncertify.client package. At the moment all I am left with is the the TravelAgency facade, which contains the bookFlight() and searchFlight() method. I have also removed the BookingDialog class, and placed the 'book' button on the main GUI. So at the moment the user can click on the book button from within the main GUI without a confirmation screen popping up to display their selection.
Eventhough lock and unlock are provided as part of the DataInterface interface, it is only called from within the remote object. So no lock or unlock method is called when in local mode. This is a code snippet from the modify method, which is implemented by the remote interface implementation, DataServiceImpl:
Chiji Nwankwo
Ranch Hand

Joined: Jun 21, 2002
Posts: 56
Hi,
Does anyone have any other issues with my design. Please comment as your input is very important.
Regards,
Chiji
Chiji Nwankwo
Ranch Hand

Joined: Jun 21, 2002
Posts: 56
Hi,
Does anyone have any other issues with my design. Please comment as your input is very important.
Regards,
Chiji
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
 
subject: Design Review part III