国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

前端項目目錄如何組織

ninefive / 1862人閱讀

摘要:背景最近看了發現其項目的目錄結構組織的不錯。然后再按照自己的項目經驗,對其項目的組織進行修改,現在總結下自己的想法。總結以上就是我根據修改的,我認為比較通用的項目目錄結構這里沒有提到測試相關。

背景

最近看了 antd pro 發現其項目的目錄結構組織的不錯。然后再按照自己的項目經驗,對其項目的組織進行修改,現在總結下自己的想法。

正題

我們看下 antd pro 自己生成的目錄結構

  ├── mock                     # 本地模擬數據
  ├── public
  │   └── favicon.ico          # Favicon
  ├── src
  │   ├── assets               # 本地靜態資源
  │   ├── common               # 應用公用配置,如導航信息
  │   ├── components           # 業務通用組件
  │   ├── e2e                  # 集成測試用例
  │   ├── layouts              # 通用布局
  │   ├── models               # dva model
  │   ├── routes               # 業務頁面入口和常用模板
  │   ├── services             # 后臺接口服務
  │   ├── utils                # 工具庫
  │   ├── g2.js                # 可視化圖形配置
  │   ├── theme.js             # 主題配置
  │   ├── index.ejs            # HTML 入口模板
  │   ├── index.js             # 應用入口
  │   ├── index.less           # 全局樣式
  │   └── router.js            # 路由入口
  ├── tests                    # 測試工具
  ├── README.md
  └── package.json
區分通用組件和業務組件

由于 antd pro 本身引用了 antd 的組件庫,所以不存在自己寫通用組件的步驟。但是有的時候我們自己項目會有自己寫通用組件的需要。組件除了有通用組件,還會有業務組件。通用組件是粒度比較細且和業務無關的組件,譬如 Dropdown。而業務組件可能是你這個項目特有的,譬如工具欄,或者某種特殊的彈框。業務組件大多數情況是由(但不僅僅由)通用組件組成。業務組件是粒度比較粗的組件。所以這個時候我一般會把通用組件放在 components 目錄下,而新建一個 widgets 目錄放業務組件,這樣分的比較清楚。不過通用組件和業務組件的劃分邊界并不是每次都能分的很清楚,有時是會相互轉換的,如果實在覺得很難區分,那可以都放在 components 下。

領域對象

src/models 目錄放的是 dva model,如果你用 redux,那么這里大致可能對應的是 state 的概念,如果用 mobx 這里隱約對應的是 store 的概念。在我看來這些都不是 model,只能叫做狀態(state)相關。我個人理解的 model 應該指的是領域對象也就是領域驅動設計(Domain-Driven Design)中的 domain object,類似于 java bean 的概念。所以我會把放在 models 下面的東西用一個新的目錄存放,通常叫 stores,而 models 下面會放領域對象(domain object)。拿 todo list 為例,我會抽象出一個 TodoItem 的領域對象,其定義:

class TodoItem {
  id = -1;
  text = "";
  done = false;

  constructor( rawData ) {
    if ( rawData ) {
      Object.assign( this, rawData );
    }
  }
}

export default TodoItem;
枚舉

這個簡單,通常項目都不會少了枚舉值,這個時候我會多帶帶新建一個 enums 的目錄放項目所用到的所有枚舉對象。當然,如果很少的話并入 common 目錄也未嘗不可。 這個時候 src 目錄基本上會變成這樣:

  ├── mock                     # 本地模擬數據
  ├── public
  │   └── favicon.ico          # Favicon
  ├── src
  │   ├── assets               # 本地靜態資源
  │   ├── common               # 應用公用配置,如導航信息
  │   ├── enums                # 枚舉
  │   ├── components           # 通用組件
  │   ├── widgets              # 業務組件
  │   ├── e2e                  # 集成測試用例
  │   ├── layouts              # 通用布局
  │   ├── stores               # 狀態相關對象(dva model)
  │   ├── models               # domain object
  │   ├── routes               # 業務頁面入口和常用模板
  │   ├── services             # 后臺接口服務
  │   ├── utils                # 工具庫
  │   ├── g2.js                # 可視化圖形配置
  │   ├── theme.js             # 主題配置
  │   ├── index.ejs            # HTML 入口模板
  │   ├── index.js             # 應用入口
  │   ├── index.less           # 全局樣式
  │   └── router.js            # 路由入口
  ├── tests                    # 測試工具
  ├── README.md
  └── package.json
精簡

看上目錄很多,這里我精簡下,如果你的項目沒有復雜的布局,沒有可視化圖形配置,沒有復雜的路由且用了 react-router4,最后沒有可配置主題那么基本的目錄結構可以精簡為:

  ├── mock                     # 本地模擬數據
  ├── public
  │   └── favicon.ico          # Favicon
  ├── src
  │   ├── assets               # 本地靜態資源
  │   ├── common               # 應用公用配置,如導航信息
  │   ├── enums                # 枚舉
  │   ├── components           # 通用組件
  │   ├── widgets              # 業務組件
  │   ├── stores               # 狀態相關對象(dva model)
  │   ├── models               # domain object
  │   ├── routes               # 業務頁面入口和常用模板
  │   ├── services             # 后臺接口服務
  │   ├── utils                # 工具庫
  │   └── index.js             # 應用入口
  ├── tests                    # 測試工具
  ├── README.md
  └── package.json
優化

如果項目前期設計做的好,抽象建模工作做的到位,其實你會發現,項目目錄大致還可以分為兩類:UI 相關和 UI 無關的。這個時候我會把 UI 相關的放到一個 app 的目錄下,整個項目就會分成 MV(model,view) 的層次:

  ├── mock                     # 本地模擬數據
  ├── public
  │   └── favicon.ico          # Favicon
  ├── src
  │   ├── app
  │   │    ├── assets               # 本地靜態資源
  │   │    ├── components           # 通用組件
  │   │    ├── widgets              # 業務組件
  │   │    ├── stores               # 狀態相關對象(dva model)
  │   │    ├── routes               # 業務頁面入口和常用模板
  │   │    └── index.js
  │   ├── common               # 應用公用配置,如導航信息
  │   ├── enums                # 枚舉
  │   ├── models               # domain object
  │   ├── services             # 后臺接口服務
  │   ├── utils                # 工具庫
  │   └── index.js             # 應用入口
  ├── tests                    # 測試工具
  ├── README.md
  └── package.json

這么做的用意是當你的項目 UI 框架重構的時候可以只動 app 目錄。從 redux 變到 mobx,也可以從 react 變成 angular。當然這層抽象不是必須的,只是我個人偏好,如果要重構通常也會整個項目重構。

總結

以上就是我根據 antd pro 修改的,我認為比較通用的項目目錄結構(這里沒有提到測試相關)。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96442.html

相關文章

  • 前端項目文件組織與組件命名

    摘要:組件劃分這種的話組件劃分的比較清晰。將組件強勢得分為類,這種結構上雖然非常清晰,但是在項目開發的過程中你不得不頻繁地將組件在跟之間移來移去,降低了開發體驗。 緣由 在開發項目的過程中,大家多多少少會對自己項目的目錄結構產生疑惑,如何合理地劃分模塊以及如何合理的命名,這些如果在項目前期的時候沒有好好規范好的話,那么后面新進來的人便會按照自己的邏輯又重新在劃分自己的目錄,這樣日復一日項目體...

    cgh1999520 評論0 收藏0
  • 基于TmodJS的前端模板工程化解決方案

    摘要:原作者唐斌騰訊什么原名是一個簡單易用的前端模板預編譯工具。本文作者為來自騰訊團隊的唐斌,他在本文中為我們分析了傳統前端模板內嵌的弊端,如開發調試效率低下自動化構建復雜度比較高等特點,并針對目前現狀給出了較好的解決方案。 原作者: 唐斌(騰訊)| TmodJS什么 TmodJS(原名atc)是一個簡單易用的前端模板預編譯工具。它通過預編譯技術讓前端模板突破瀏覽器限制,實現后端模板一樣的同...

    zhaochunqi 評論0 收藏0
  • Django項目前端工程化的探索

    摘要:項目前端工程化的探索不通過層實現非網頁開發的前后端分離。做過這樣項目的各位攻城獅應該都知道有多痛苦吧。仔細想來,其實只是想要模板和靜態資源,我們可以直接在目錄下寫,當然也可以開一個前端工程來寫,最后把模板和靜態資源到工程的相應目錄下。 Django項目前端工程化的探索 不通過node層實現非SPA網頁開發的前后端分離。 技術棧:webpack + jade + es6 + scss +...

    jsummer 評論0 收藏0
  • Django項目前端工程化的探索

    摘要:項目前端工程化的探索不通過層實現非網頁開發的前后端分離。做過這樣項目的各位攻城獅應該都知道有多痛苦吧。仔細想來,其實只是想要模板和靜態資源,我們可以直接在目錄下寫,當然也可以開一個前端工程來寫,最后把模板和靜態資源到工程的相應目錄下。 Django項目前端工程化的探索 不通過node層實現非SPA網頁開發的前后端分離。 技術棧:webpack + jade + es6 + scss +...

    buildupchao 評論0 收藏0
  • Django項目前端工程化的探索

    摘要:項目前端工程化的探索不通過層實現非網頁開發的前后端分離。做過這樣項目的各位攻城獅應該都知道有多痛苦吧。仔細想來,其實只是想要模板和靜態資源,我們可以直接在目錄下寫,當然也可以開一個前端工程來寫,最后把模板和靜態資源到工程的相應目錄下。 Django項目前端工程化的探索 不通過node層實現非SPA網頁開發的前后端分離。 技術棧:webpack + jade + es6 + scss +...

    Jackwoo 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<