代码之家  ›  专栏  ›  技术社区  ›  danieltalsky

在这个简单的例子中,哪个功能架构最适合维护?

  •  0
  • danieltalsky  · 技术社区  · 15 年前

    我正在将“promo code”功能添加到其他人编写的在线购物车中。这是一个漂亮的米老鼠建筑问题,但我想听听几个意见。我的三个想法都可以,但是您认为哪一个对可维护性最好?

    所以,这里是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'
    )
    

    最聪明的是什么(不要太复杂):

    用sql检查存在性,代码中的其他内容都是独立的

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

    或者,有一个验证函数,但只能由get函数调用它:

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

    检查SQL中的所有无效项与不存在项相同:

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

    请随意指出任何其他方法或这里的古怪。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Donny Kurnia    15 年前

    在我的应用程序中,我将其创建为2个表。第一张桌子和你一样,但是只有 usage_limit 作为整数。在第二个表中,我将保存用法,每行一个用法。

    promocode_usage 桌子,我要 promocode_id 作为外键和其他必需的列(如usage datetime、user id等)来检查促销是否仍然可用,我将简单地 count 排在 促销码使用 促性腺激素释放激素 我想查一下。如果结果小于 使用限制 值时,可以使用促销。