J'ajoute la fonctionnalité "code promo" à un panier en ligne écrit par quelqu'un d'autre. C'est une question d'architecture de souris assez micky, mais j'aimerais entendre quelques opinions. Mes trois idées fonctionneraient, mais selon vous, quelle est la meilleure pour la maintenabilité?Quelle architecture de fonction est la meilleure pour la maintenabilité dans ce cas simple?
Alors, voici la structure de la table de base pour les codes promo
CREATE TABLE `promocodes` (
`promocode_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`promocode` VARCHAR(255) NOT NULL ,
`description` VARCHAR(255) NULL ,
`discount_percentage` INT NULL ,
`discount_dollars` DECIMAL(6, 2) NULL ,
`expiration_date` DATE NULL ,
`uses_remaining` INT NULL ,
`is_active` BOOL NOT NULL DEFAULT '1'
)
Quel est le plus intelligent (sans se faire trop compliqué):
Vérifier l'existence avec SQL, tout le reste séparement dans le code
// LIBRARY
function promoCodeExists($promoCodeString){
// make sql call
return $promoCodeDetailsHash; // or false if no record
}
function isPromoCodeUsable($promoCodeDetailsHash){
// check expiry date and number of uses left and active/inactive
}
function usePromoCode($promoCodeId){
// do order association
// decrement uses left
}
// USAGE
$promoCodeDetailsHash = promoCodeExists($promoCode);
if (is_array($promoCodeDetailsHash) AND isPromoCodeUsable($promoCodeDetailsHash)){
usePromoCode($promoCodeDetailsHash['id'])
} else {
// invalid promo code
}
Ou, avoir une fonction de validation mais l'avoir appelé seulement par t il se fonction:
// LIBRARY
function validatePromoCode($promoCodeDetailsHash){
// check expiry date and number of uses left and active/inactive
}
function isPromoCodeUsable($promoCodeString){
// make sql call
return validatePromoCode($promoCodeDetailsHash); // or false if no record
}
// USAGE
$promoCodeDetailsHash = promoCodeExists($promoCode);
if (is_array(isPromoCodeUsable($promoCodeDetailsHash))){
usePromoCode($promoCodeDetailsHash['id'])
} else {
// invalid promo code
}
Vérifiez tout dans SQL avec invalide le même que nonexistance:
// LIBRARY
function getDetailsForUsablePromoCode($promoCode){
// use SQL WHERE clauses to only return existence for currently valid promo codes
// or false if no result
}
// USAGE
$promoCodeDetailsHash = getDetailsForUsablePromoCode($promoCode)
if (is_array($promoCodeDetailsHash)){
usePromoCode($promoCodeDetailsHash['id'])
} else {
// error state
}
Ne hésitez pas à signaler toute autre approche ou Wackness ici.