2008-09-25 43 views
1

你的應用程序的哪些部分沒有編碼? 我認爲最明顯的例子之一就是數據庫憑據 - 硬編碼被認爲是不好的。在大多數情況下,很容易決定是否需要外部化或編碼。對我而言,規則很簡單。應用程序的某些部分應外在如果:你喜歡將哪些應用程序部件外化爲配置,爲什麼?

  1. 它可以而且應該由非開發改變了,但經常被包含在UI定義的應用程序設置(DB憑證,服務URL等)
  2. 它不需要編程語言,似乎不自然被編碼(本地化)

你有什麼要補充的?

這與this question about spring cfg有點相關。 Spring配置對我來說似乎不太明顯,因爲在我的實踐中,除開發人員之外,其他任何人都不會修改它。外化的道路可以讓你遠離,整個項目被「配置」,而不是編碼 - 所以在哪裏停止?

所以,請張貼在這裏從你的經驗,當你從有得配置,而不是編碼效益一些例子 - 在春天像依賴注入配置等 如果你使用的彈簧 - 如何往往配置而無需重新編譯改變了嗎?

回答

1

路徑和服務器名稱/地址浮現在腦海..

5

任何需要你的應用程序的不同部署之間的不同。也就是說,任何特定於環境的東西。

例子包括:

  • 數據庫連接字符串
  • 網址,網頁或WCF服務
  • 日誌記錄配置
1

我同意你的兩個條件,這就是爲什麼我:

  1. 很少包含ac onfig文件作爲Windows或Windows Mobile應用程序的一部分(Web應用程序是)。
  2. 如果我確實包含一個配置文件,意圖由最終用戶調整,它肯定不會是XML。
2

除了明顯變化的東西(路徑,服務器,端口等)之外,有些人認爲你應該能夠輕易地改變任何可能的合理改變,例如,假設你有一個通用的引擎,關於業務邏輯(規則引擎)。

然後,您可以在「配置文件」上定義規則,該規則最終不會低於在DSL中編程而是在通用語言中編程。好處在於它更接近域,因此它更容易且更易於維護,並且您可以輕鬆更改那些會需要新構建的東西。

這背後的主要理由是,你所假定的事情永遠不會改變總是最終變化,所以你最好做好準備。

1

員工電子郵件/因爲員工的名字可以來來去去...(你通常應該儘量保持他們的應用程序雖然)

+0

通過使用電子郵件別名(在電子郵件服務器上)可以更好地處理此問題。 即[email protected],而不是[email protected] 當有人離開時,只需更改別名以指向他們的替換 - 根本不需要應用程序中的任何電子郵件配置。 – belugabob 2008-12-01 15:50:43

1

配置文件應包括:

  • 部署細節
    • 數據庫憑據
    • 文件路徑
    • 主機名
  • 任何在很多地方使用,但可能會改變
    • 聯繫人的電子郵件地址
  • 選項並非在GUI

最後一個是有點開放式,但非常重要。我發現預測客戶可能在未來想要改變的變量非常有用。如果更改不頻繁,我或他們可以編輯配置文件。如果它變成了一件常見的事情,那麼將選項添加到沒有硬編碼的GUI是很簡單的。

3

您的應用程序使用的任何信息是「數據」,並且可能會根據它的安裝位置而變化。喜歡的東西:

  • SMTP郵件服務器來發送電子郵件
  • 數據庫連接字符串
  • 路徑到文件所使用的應用程序
  • FTP服務器&連接信息
  • Active Directory中的位置/文件夾用於身份驗證的服務器
  • 應用程序中顯示的任何鏈接至外部信息 消息來源
  • 警告極限值
  • 我甚至已將RegEx過濾器用於限制數據輸入字段的允許字符 。
1

我還要補充的加密密鑰(這本身應該被加密)...

基本經驗法則是信息的應用程序之前需要的常規,功能操作,數據,它必須具有導通手(即本地和不聯網)。
請注意,此數據不應該動態更改或大量使用它,否則應該在數據庫中。

1

使用Spring應用程序我實際上有兩種類型的配置區別:

  1. 項目外化到屬性文件分別是「部署時間」的擔憂或「環境特異性」:服務器IP的/地址,文件系統位置,等等等等

  2. Spring XML配置,可以通過AOP做很多事情,比如顯示整個應用程序的結構,應用行爲等

1

我使用Spring來連接沒有GUI的J2SE應用程序(事務性切換)中的所有bean。這樣一來,對於我來說,在每個部署中都有不同的配置(我們在不同的國家/地區運行此項功能)非常容易,而無需編寫任何不同的代碼。 我喜歡的另一件事是當我使用plain JDBC(或Spring JDBC)時,將所有SQL語句與代碼分開管理。就像屬性文件或XML或其他東西一樣,有時甚至是將使用該語句的bean中的String屬性(當只有一個將使用該語句的bean,例如DAO)時。

1

我打算使用spring JDBC或vanilla JDBC來進行數據持久化,在這裏我們決定從Java代碼中外部化所有的SQL,所以在SQL查詢調優和優化方面可以更好地調整,但我們不需要打擾java代碼。

相關問題