Hangi fonksiyon mimarisi bu basit durumda Düzeltilebilirlik için en iyi nedir?

1 Cevap php

Ben başkası tarafından yazılmış bir online alışveriş sepetine "promosyon kodu" işlevler ekleyerek ediyorum. Bu oldukça micky fare mimari bir soru, ama ben görüşlerin bir çift duymak istiyorum. Tüm fikirlerim üç çalışacak, ancak sürdürülebilirlik için iyi olduğunu düşünüyorsunuz?

Yani, burada promo kodları için temel tablo yapısı:

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'
)

(Overcomplicated almadan) zeki nedir:

Check existence with SQL, everything else seperately in 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
}

Or, have a validation function but have it called only by the get function:

// 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
}

Check everything in SQL with invalid the same as 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
}

Herhangi diğer yaklaşımları işaret veya buraya wackness çekinmeyin.

1 Cevap

Benim uygulamada, ben 2 tablo olarak oluşturun. İlk tablo sadece seni seviyorum, ama sadece tamsayı olarak usage_limit tutun. İkinci tabloda, ben kullanımını, satır başına bir kullanım yapacak.

promocode_usage tabloda, ben yapacağım, promocode_id yabancı anahtar ve promosyon hala kullanılabilir olup olmadığını kontrol etmek vb kullanım datetime kullanıcı kimliği gibi diğer gerekli sütun olarak sahip olacak promocode_id ben kontrol etmek istiyorum var promocode_usage tabloda sadece count satır. usage_limit değerden sonucu daha az ise, promosyon kullanılabilir.