2016-12-29 41 views
1

我試圖想出一個基於每個客戶的基礎上配置一個相當標準的基於Web的應用程序的策略,所以我們可以多次出售它,而無需編寫額外的代碼每個客戶。這是一個LAMP棧(其中P是使用yii2的php)爲不同的客戶創建應用程序

我最初的想法是爲每個客戶創建一個JSON/YAML文件,並根據其中的內容開啓/關閉功能。像{hasAmazonApi:0,hasEbayApi:1}等

問題是,當然,代碼中有很多if/else。

我的老闆建議配置文件可以用來實際控制部署時在服務器上部署的代碼,編寫腳本來編寫代碼 - 但這似乎充滿了困難和危險。

這兩種解決方案都不是完美的 - 有什麼建議嗎?

+0

我們決定了(當然,我決定把它賣給我的老闆),並且有了一些與衆不同的東西。 我剛剛解決的問題有點像鉤子。工作流程的每個元素都會發生一個會被run_hook('some-func',$ args)啓動的函數。 這樣,我們可以覆蓋每個客戶的基礎上的每個鉤子,或者如果更適合他們的需求,就使用通用的鉤子。 它更復雜,但實際上使我們的if/else-s – WeeDom

回答

1

我們主要通過兩種方式處理這個問題:

  1. 我們做一個應用程序有一個數據庫(一個代碼庫),並通過自定義規則RBAC系統單獨所有用戶(即用戶應該屬於這個組織。來控制這個項目)。在你的情況下:用戶應該已經購買了這個模塊來使用它。
  2. 我們用一個代碼庫做一個應用程序。但每個客戶都有自己的數據庫。所以用戶只能在他自己的數據庫中看到數據(他永遠不能「切換」到另一個數據庫)。

當然還有其他方法。根據您的需求和角色數量,您可以選擇一款適合自己的產品。

0

確實沒有正確或錯誤的答案,但您的第一個選擇可能更可取,只要您有完整訪問代碼的部署位置,並且客戶無權更改配置並選擇加入其中沒有付錢。

你對部分部署保持警惕是正確的。開發和測試應用程序要容易得多,因爲它全部集成在一個組件中,並且配置決定了用戶可以執行的操作。您冒險難以找出方法,並且可能無法有效地重用代碼。如果功能可以被分成像這樣的模塊,那麼Yii2模塊可能適用於後一種方法。由於上述原因,我只會作爲最後的手段。從您的示例中,聽起來似乎在任何情況下都是不可能的(eBay/Amazon憑據輸入可能位於同一模塊中,並且在用戶界面中彼此並排)。

+0

少得多,ebay/amazon的憑證將在db中,而不是硬編碼。 – WeeDom

相關問題