Exemples de patterns de programmation des seuils d'objets métier

Voici quelques exemples concernant la façon d'accéder aux fichiers de configuration, d'effectuer la vérification de l'état non lié et de lancer une exception en cas de violation.

Accès à la propriété de seuil


String compId = "com.ibm.commerce.storelocator";
ComponentConfiguration config = ComponentConfigurationRegistry.instance().getComponentConfiguration(compId);
String mapWidth = config.getValueByConfigGroupingNameAndPropertyName("map", "mapWidth");

L'exemple ci-dessus illustre une simple comparaison avec le seuil.

Vérification par rapport au seuil


/**
 * Returns whether the threshold in the given context has been exceeded.
 * The default behaviour passes if there is no threshold.  Subclasses should
 * override this to provide additional checking using additional
 * information.
 *
 * @return  True if the threshold was exceeded, false otherwise.
*/
public boolean isThresholdAcceptable() {
    final String METHODNAME = "isThresholdAcceptable";
    ECTrace.entry(ECTraceIdentifiers.COMPONENT_ORDER, CLASSNAME, METHODNAME);

    boolean passed = threshold == null || threshold.compareTo(BigDecimal.ZERO) < 0;

    if (ECTrace.traceEnabled(ECTraceIdentifiers.COMPONENT_ORDER)) {
        ECTrace.exit(ECTraceIdentifiers.COMPONENT_ORDER, CLASSNAME, METHODNAME, Boolean.valueOf(passed));
    }

    return passed;
}
La section suivante est un autre exemple de façon de travailler avec la taille de la page par défaut et la taille maximale de la page. Le comportement est affiché dans le pseudo code suivant :

// enter a point in the code where we need to paginate

maxItems = getObject.getMaxItems()
if (maxItems == null) {
    maxItems = getDefaultPageSize()
}

maximumPageSize = getMaximumPageSize()
if (maximumPageSize != null && (maxItems == null || maxItems > maximumPageSize)) {
    maxItems = maximumPageSize
}

if (maxItems == null || maxItems < 0) {
    maxItems = 0
}

// use the startNumber and maxItems to choose the items in the page to return
En outre, si l'on considère les cas suivants où les valeurs ne sont pas définies :
  1. defaultPageSize existe et maxPageSize existe
    1. si defaultPageSize == maxPageSize – la taille de la page sera limitée à la maxPageSize, que les paramètres de pagination soient définis ou non.
    2. si defaultPageSize < maxPageSize – si aucun paramètre n'est défini, defaultPageSize sera utilisé, sinon les paramètres seront délimités par maxPageSize.
    3. si defaultPageSize > maxPageSize – la taille de la page sera limitée à la maxPageSize, que les paramètres de pagination soient définis ou non.
  2. defaultPageSize existe mais maxPageSize n'existe pas – la taille de la page ne sera délimitée par defaultPageSize que s'il n'y a pas de paramètres de pagination définis.
  3. defaultPageSize n'existe pas, mais maxPageSize existe – la taille de la page sera limitée à maxPageSize, que les paramètres de pagination sont définis ou non.
  4. defaultPageSize n'existe pas et maxPageSize n'existe pas – aucune délimitation de taille de page ne sera appliquée.

Traitement d'une exception


Object[] params = new Object[] {getThreshold(), getNumAdded(), getNumCurrent()};
throw new ECApplicationException(getUserErrorMessage(), CLASSNAME, "throwDefaultException", params);

Violation de la journalisation


/**
 * Logs a message to the administrator about the threshold being exceeded.
 * This method should be called when it is known that a threshold has been
 * exceeded.
 *
 * @param logger
 *          The logger to use to notify the administrator.  Cannot be null.
 * @param methodName
 *          The name of the method which is calling this.  Cannot be null
 *          or empty.
*/
public void log(Logger logger, String methodName) {
    if (LoggingHelper.isTraceEnabled(logger)) {
    
        Object[] params = new Object[] {getThreshold(), getNumAdded(),
                getNumCurrent (), getUserID(), getStoreID(), getOrderID()};

        logger.logp(Level.WARNING, logger.getName(), methodName,
                getAdminErrorMessage().getMessageKey(), params);
    }
}