我很難真正地指出問題,但我會盡我所能來描述它: 在企業的數據庫驅動的應用程序中,存在始終存在的對象(數據庫中的行)。應用程序在啓動時不能沒有它們,因爲它們是創建應用程序的業務的修復部分。在應用程序開發中處理預裝系統對象的最佳做法是什麼?
例子:
- 如果應用程序管理聯繫人應用程序正在運行的接觸(因此「客戶」他/她)已經在應用程序中可用的聯繫。
- 如果是爲某種類型的商業創建發票的應用程序,則必須有幾個實體類型產品的記錄,這些記錄已具有某些屬性。
- 在手機已經有一些預裝的輪廓
這些對象是衆所周知的程序員和用戶。程序員必須能夠訪問它們(加載特殊的已知客戶聯繫人或加載默認配置文件)。現在我的問題是:
- 是否有這些類型的對象/這種設置或模式的共同名稱?我可以想象這與「測試裝置」類似,但我只談論生產環境,而不是測試。
- 如何解決這些對象?我在哪裏保存它們?我如何加載它們?
- 由於他們總是在場,我如何告訴系統他們是隻讀的,不能刪除?
我們使用SQL腳本來創建(或遷移)數據庫模式,然後我們使用插入默認數據的Java工具。記錄與非默認數據存儲在相同的表中,但其ID在預留的數字範圍內。這些ID在Java代碼中保持爲常量。我們需要改變這個策略,因爲我們引入了JPA,並且JPA提供者不支持保留的編號。這就是爲什麼我想看看別人是如何做這件事的。 @Slavik:你說「裝載CD工具等」是什麼意思?這將如何從Java應用程序工作? – Wombat
1.我們使用的策略根本不允許刪除某些模型 - 而不是被硬刪除,記錄被軟刪除, - 它們的標誌屬性從'active'變爲'deleted'。對於許多模型和類型的數據,它是方便的,並且更安全的方法(選擇也取決於某些模型/實體的數據量)。2.即使您確實需要硬刪除,對於缺省數據標誌default使用,並且在連接器/ ORM級別有自動修改DB查詢 - 所以當發出DELETE時,然後在WHERE鍵入NOT IN('default')。 – BlackStork
3.使用CD工具加載它意味着有許多Continiuos Delivery工具可以非常方便地執行數據模式/內容部署和遷移。我們使用Ansible /專有腳本組合來進行數據庫部署自動化,並將數據交付給不同項目和代碼使用的不同關係數據庫。 – BlackStork