什麼是數據庫驅動的asp.net web應用程序流程中的最佳方式或建議的最佳實踐?我的意思是數據庫第一或編碼第一或並排?首先是:數據庫還是應用程序邏輯?
回答
如果沒有現有數據庫,您的數據訪問代碼將無法編譯 - 除非您將它存根(或模擬)。所以可能數據庫是第一位的。
但是,孤立地完成整個應用程序塊是一個壞主意。理想情況下,您應該設計和構建系統的薄片 - 數據庫和應用程序 - 攜手共進。這些條應該是功能性的內聚子集,可能小於子系統。編碼屏幕和業務規則的行爲不可避免地會引發數據模型中的問題。因此,擁有一名數據建模人員或DBA很樂意與開發人員一起逐步開展工作。
編輯
斯蒂芬妮作出了非常中肯點:
「,這是真正堅持 應用數據的核心表不能 piecemealed大部分數據是已知的 。在項目啓動時,它有一個表格,你需要找到它 。「
我同意核心實體是在項目啓動可知,和物理數據模型可以從邏輯數據模型導出。但我認爲,一開始就不可能完全確定任何桌子的結構,甚至是核心桌子。這是因爲在設計/構建階段的開始階段,我們所要做的就是需求,如果有一件事情,歷史告訴我們有關需求的事情,那麼他們將改變。
因此,將需要新的表格,一些現有的表格將會過時。會有需要添加的列,需要修改的列,需要刪除的列。這就是大自然給了我們ALTER TABLE語句的原因。
我不是在暗示我們不設計我們的桌子,或者把它們拼湊起來。我只是建議,當我們開始設計HR子系統時,我們需要擔心EMPLOYEES表和SALARIES表。在開始銷售工作之前,我們不需要關心庫存或訂單。
我想你需要先定義數據模型,然後纔開始編碼。在實際編寫代碼之前,您應該仔細計劃一切。
首先是功能列表。 然後,詳細的規格。然後測試所有計劃和設計,包括數據庫。
然後,先執行哪一個並不重要。
我們不是在討論首先要實現什麼,而是首先要設計什麼。 – 2010-06-11 14:47:15
你可能會最終做到「並排」。
您需要一些數據才能測試應用程序,但您需要應用程序能夠驗證您是否存儲了正確的數據。
首先進行一些建模,然後建立一個或兩個特徵的最小值。然後當這些工作正常時,添加下一個功能等等。
您需要編寫一些數據庫更新過程(代碼和關於什麼時候以及何時更新的規則),因爲您將不得不擴展您的表格,但無論如何,您仍然需要那些用於最終系統的表格隨着新需求的出現,將不得不改變。
已經做了好幾次,我發現自己總是做它像這樣:
- 定義我試圖解決這個問題。
- 寫出一些用例。
- 讓我的重要的其他人或朋友告訴我,如果這是一個問題。
- 勾畫出一些示例屏幕。
- 編寫用例的流程圖。
- Ask my Rubber-duck questions。
- 使用問題來提煉1-6。
- 寫出'名詞'。那些成爲我的數據模型。
- 寫出行動。這些成爲應用邏輯。
- 代碼數據模型。
- 代碼應用程序邏輯。
- 意識到我已經得到了一點點錯誤。
- 根據需要重複10-12次。
- 問:「我解決了這個問題嗎?」?
- 如果沒有,沖洗,起泡並重復1-15。
愛步驟6!給我一個傻笑。 – HLGEM 2010-06-11 13:11:47
我喜歡它。 (需要4個字符才能發表完整評論) – 2010-06-11 14:50:20
我們親自從域名開始並且並排執行操作。重要的部分是我們實現了垂直切片的應用程序(完全正常工作的端到端特性),而不是水平切片(例如,首先是整個數據庫層,然後是數據訪問,然後是服務,然後是演示文稿):我們逐漸構建應用程序,並在每次迭代後用工作代碼演示進度。
這是個詭異的問題。國際海事組織,他們都在你的規劃和設計階段平行進行。他們之間的關係非常密切,以至於他們在一起合作是有意義的。請記住,當您的代碼仍處於初始階段時,您的數據庫設計將基本完全開發(儘管您的應用程序邏輯應該幾乎完全映射到您的頭部或紙上)
想法是,在問題的背景下設計解決方案。當你計劃出你的解決方案時,你將(或應該)將你的應用程序定義爲一組事物和動作(名詞和動詞)。
例如,一個非常基本的幫助臺程序包含人員和門票。人們需要創建門票,更新門票和關閉門票。需要持久存儲的名詞將包含您的數據庫,名詞+動作將包含在您的應用程序中。
有時候你的表映射和表之間的關係會很明顯(IE人創建票,ticket.creatorID = people.personID)和其他時候關係並沒有真正點擊你的腦袋,直到你開始通過用例開始工作或者直到你開始編寫你的代碼(IE不同的頁面有不同的訪問級別來定義他們可以做的事情。一眼看起來這似乎是一個表格中的簡單字段,但在實踐中它更好的是作爲一個單獨的表格)。
應用程序都是關於功能。 您不會構建應用程序來存儲數據, 但提供功能。如果我們 不能就此達成一致,那麼討論當然是 。開發的軟件應該是 ,以滿足其用戶而不是開發人員的需求。
那麼我真的不知道第二句話。如果你認爲我的公司支付給我一筆很好的薪水來編寫滿足我而不是我的用戶的代碼,那麼你就瘋了。所以這個論點是一個稻草人。回到第一個。
這是應用程序中心人員(他們)與數據庫中心人員(我們)的共同觀點。他們將練習的整個觀點看作「提供特徵」。這些是客戶知道他們想要的東西,並要求他們。對他們來說,數據庫只是這些功能所需的持久性。當它們完成時,就是這樣,交付的功能,數據庫就足夠用於這些功能。可能是整個Rube Goldberg數據庫中存在冗餘數據,嚴重違反正常形式,應用程序強制執行的約束,您有什麼。
認爲整體可用性遠遠超過單獨的數據庫設計
如果你的數據庫的設計是影響您的可用性比設計是壞的。我毫不懷疑,追求功能的人會使數據庫處於一種嚴重妨礙可用性的狀態。以數據爲中心的人們,不要將系統視爲僅提供問題的地方,而是智能資本的存儲庫,可以比Application-du-jour更多地利用它。我無法描述一個團隊使用其他團隊的應用程序的數據庫來增強其應用程序價值的案例數量。只要看看所有的醫學研究,不過是對現有研究的薈萃分析。如果您認爲只有您的應用程序的功能和隨後使用您的應用程序數據的功能沒有這些功能,那麼這些都不是可能的。
一個好的數據模型不是不可侵犯的。當然你會加入它,當需求改變時就改變它。但是如果你不完全瞭解你的數據,我不知道任何人都可以開始編寫代碼。
由於@back2dos昨天刪除了他們的評論,因此這篇文章沒有多少意義,因爲它沒有真正解決OP的問題。 – APC 2010-06-14 11:04:43
+1'如果您不完全瞭解您的數據,我不知道任何人都可以開始編寫代碼。「 – 2010-06-14 15:19:18
- 1. 用戶界面首先還是邏輯優先?
- 2. 程序邏輯是否應該強化數據庫邏輯?
- 3. 在使用Maven開發OSGi應用程序時,我應該首先使用POM還是首先使用MANIFEST?
- 4. 標籤系統應該與數據邏輯還是業務邏輯交互?
- 5. 我應該在數據庫級別還是應用程序邏輯(.NET)中存儲我的枚舉?
- 6. 首先使用MVVM和數據庫的新WPF應用程序?
- 7. Python聲明順序:首先是類還是函數?
- 8. 發送DNS數據:首先是MSB還是LSB?
- 9. 在phonegap應用程序中使用數據庫還是不?
- 10. 用於ASP.NET MVC應用程序的數據庫和邏輯層
- 11. 該代碼是業務邏輯還是表示邏輯?
- 12. 數據庫首先,但只是數據庫的一個子集
- 13. 邏輯:數據庫或應用程序/ 2(約束檢查)
- 14. PHP應用程序數據庫邏輯有缺陷
- 15. 邏輯分離:搜索,數據庫和應用程序
- 16. 保存邏輯應用程序運行到數據庫
- 17. 數據庫存儲vs應用程序邏輯
- 18. MySQL:是AND條件還是邏輯?
- 19. 靜態數據應該存儲在數據庫還是應用程序中
- 20. 網站設計還是後端邏輯優先?
- 21. PCA首先還是正常化?
- 22. 首先,A-0系統還是短碼?
- 23. Ruby的「首先和休息」邏輯
- 24. iPhone應用程序邏輯
- 25. EF + SQL Server:代碼優先還是數據庫優先
- 26. 實體框架,數據庫優先還是模型優先?
- 27. ASP.NET mvc數據庫教程首先
- 28. 數據庫首先 - DefaulValue爲
- 29. NHibernate數據庫 - 首先
- 30. MapView是首先在iOS應用程序中的對象
我同意需要一些迭代。我完全不同意你應該建立你的數據模型的「細線」。是的,你會忘記某個表格上的標誌,或者你需要一些處理表格,但是保留應用程序數據的核心表格確實不能被分割。 大部分數據在項目啓動時已知。它有一個表格,你需要找到它。如果大部分數據都不知道,那麼你就把自己搞得「我無法收集需求,我有太多的代碼要寫」曼陀羅。 – 2010-06-11 14:42:48
由於當數據訪問代碼不*編譯*沒有數據庫? :) – 2010-06-11 16:10:02