1. 程式人生 > >作業系統開發的設計流程和工具流程

作業系統開發的設計流程和工具流程

大量 架構 ron 希望 規範 開源 自己 數據庫設計 都在

以前聽軟件開發的老師講的軟件開發流程,也不是不以為然,只是覺得常規套路沒太往心裏去。

最近開始考慮開發的問題才意識到,學了這麽多技術,de了這麽久的bug最後拿到一個issue手還很生。

為什麽要功能分析技術分析?為什麽要把工序分出先後?這是我拿到一個看起來很簡單的網站時才意識到的問題。

----------   --------------------   ------------  --------------  --------------  ---------------------
| 功能分析 |->|  技術分析與功能設計  |->| 數據庫設計 |->| 文件系統設計 |->| 頁面功能實現 |->|  頁面修飾與性能修飾  |
----------   --------------------   ------------  --------------  --------------  ---------------------

決定一個項目的質量和開發周期的往往是最開始的功能設計和技術架構設計。

1. 文件系統的規劃

  這一階段容易埋下的問題往往不是技術上的問題,而是不必要或者規劃錯誤導致延長開發周期,使得debug方法繁瑣

  1. 使用Java還是PHP開發?這是根據項目的規模和功能結構決定的,JSP相對穩定,能夠應對規模比較大的系統,開源程度高,通用性強;而PHP對輕量開發和大規模開發都有很好的適應。語法簡單部署快捷,網上的資源和經驗也比較多。
  2. Java開發系統中的DAO模式和Service模式,在調用DAO和ServiceImpl的時候對Entity的設計就比較重要。一般第一步是部署文件系統和Classpath等配置,對可能要用到的包進行部署後,節約後期大量的調試和維護成本。由於Java系統比PHP系統復雜,配置相對困難,前期的設定對開發周期和維護運營來說起著決定性的作用。
  3. PHP系統自由度更大,是否使用Laravel等框架是根據項目的規模和開發成本決定的,客戶一般希望在開發和運營兩個方面壓縮成本,規模較大的項目借助框架以提升開發效率和維護成本,如果沒有使用框架的必要強行上了框架,不僅會延長開發周期還會增加額外的開銷。
  4. 以Ruby on rails為代表的新型Web系統,語法和效能無疑都是最先進的。但是要考慮的問題就是,相比於兩大傳統系統網上的資料不多,遇到開發和部署問題往往難以求助。同時采用新的系統和語言客戶是否滿意?會不會對以後的運維帶來障礙?服務器開銷好預測嗎?不僅自己要對自己的技術足夠自信,確定之後還要征求客戶的意見。畢竟開發系統是滿足客戶的需求不是自己的需求。
  5. 采用什麽數據庫?一般來說自己做就是MySQL,團隊做那就公司用什麽你用什麽咯。一般來說數據庫這種類似於操作系統,如果沒有相當可怕的壁壘和層出不窮的bug那就是先入為主,因為大家的功能都大同小異。即便先入為主的那個有點難用。非要說那個系統更優越?其實各有千秋。在保持各種功能都打通的前提下,選取最擅長的,在性能,成本,開發能力之間拿捏一個平衡,因為往往自己就是整個開發中最懂技術的人(相對而言),這些平衡其實最終影響到的還是自己.

2. 功能分析與技術分析

  分析什麽?這個階段往往是在各種選取都定好了之後,環境都打通了,開始著手做具體的事情。影響到的主要是代碼階段

  1. 數據庫、文件操作與視圖之間的關系是首先要思考的,數據庫設計網上最多的話題是效能。數據庫設計階段對代碼的影響也是很大的,譬如Java的BaseDAO模塊,PHP中require Conn_DB,用哪些函數?引用的方法是一次還是多次?哪些引用數據庫接口可以合並並減小開銷?其實合並功能化簡功能的過程就是簡化代碼開發的過程,簡化代碼結構就簡化了系統代碼的復雜度,我看到別人的代碼,有的時候就覺得自己坐井觀天了,稍微用點優化的結構就覺得自己很了不起,看見別人一氣呵成簡單明了的過程,才發現很多問題是可以避免的,根本不需要解決。
  2. 在合並功能的過程中很重要的一點就是原則,原則往往是自己定的,比如,Qt中,頭文件的成員都是指針,為什麽?這在大公司的開發規範裏也可見一斑,C++中把變量寫得到處都是構造和析構將會難以控制,為什麽使用service+impl的方案?這是隱式定義方法的一種技巧,調用都是Interface,實現都在Impl,他們之間的關系?交給Java自己去完成。原則還有一點價值在於,當你看到一個問題的時候:“我知道我不會這樣寫”,“這種情況按照我的習慣是不會發生的”,debug時自動砍掉了一些原則以外的範圍。

3. 前後端分離開發方法

  分離前後端不僅僅是讓軟件和系統結構化,還可以在開發的時候就簡化各種功能的實現方法。

  1. 先實現功能,後美化。這是常規的軟件開發套路。但是遇到的很多問題,比如前後端如何分離,一個函數又調用前端又調用後端,如何分離?這就是設計模式的功勞了。常見的模型其實老練的程序員也很難起出具體的名字,但是上手時就很敏感的覺得,應該這樣寫。我這方面理解的還不是很透徹,用Java還可以照貓畫虎的寫幾個樣板,換個場景可能就會開始糊塗。背下來只是第一步,開發過程中的實踐,主要靠自己的感覺。
  2. 前後端是相對而言的,網站系統中,用戶看得見的是前端,看不見的是後端,又說,數據庫是後端,php接口是前端,再說,用戶是前端,管理員是後端。因為前後端分離是功能單元劃分的原則之一,在大的方向上進行隔離並拉出有限的接口,對該層次功能設計能夠進行良好的控制。

作業系統開發的設計流程和工具流程