天天看點

讓工作更輕松——EA類圖與代碼同步

    随着能力的提升,現在做的項目,都要求先畫類圖,再敲代碼,但是每次畫圖後,在敲代碼起初,還跟圖對應着呢,到後來,發現圖中有不合适的地方,然後就把圖改一下,再敲代碼,但是圖中錯誤太多的話,就懶得再去改圖了,直接修改代碼了。這樣時間一長,圖就算廢棄了。開發完了,态度好一點的人,會用代碼去生成一下圖去交差,有的幹脆不管了,結果給同一項目組其他同僚的工作造成了很大的影響。當然我說的這種情況在小公司中存在的比較多。當然我們在自學的時候,也會遇到這種情況。

    如何解決這一問題呢?

    從根本上說,當然是分析到位,畫圖時考慮周全,程式員要嚴格的按圖跟文檔去編碼。不能私自更改代碼。如需更改,需要将建議送出到項目經理那去稽核,由項目經理去修改。當然好多公司或者個人不會按照這些步驟走。畢竟改過來改過去,會浪費很多時間。是以讓圖和代碼同步,即可解決這一問題。

    先說思路吧:我這裡用到的是EA和VS2010,用EA畫類圖,然後生成代碼架構。在VS項目中添加生成的代碼,然後在VS中修改代碼,可以在EA中通過逆向代碼工程更新原來的類圖。

    簡單的示範一下:

    首先建立一個項目,我這裡建立的是控制台應用程式:

讓工作更輕松——EA類圖與代碼同步

然後在EA中畫一個類圖

讓工作更輕松——EA類圖與代碼同步

在右鍵,選擇生成代碼:(因為我這個是單個類,是以直接在類上選擇生成代碼,如果你類圖中類比較多,可以在上面那個類似檔案夾的圖示上,選擇生成代碼)

讓工作更輕松——EA類圖與代碼同步

選擇項目檔案夾下,并選對相對應語言。我這裡用的是C#。點選生成即可。如圖:

讓工作更輕松——EA類圖與代碼同步

這樣在項目檔案夾下,就看見多了一個Human.cs檔案

讓工作更輕松——EA類圖與代碼同步

現在這個圖跟代碼就已經建立的關系,因為EA中內建了代碼編輯器,是以我們可以通過在類上右鍵,選擇檢視源代碼:

讓工作更輕松——EA類圖與代碼同步

就可以打開源代碼了:

讓工作更輕松——EA類圖與代碼同步

然後在vs項目中,添加上剛生成的cs,

讓工作更輕松——EA類圖與代碼同步

這樣,在vs項目中,就多了一個Human類:

讓工作更輕松——EA類圖與代碼同步

打開看一下,由圖直接生成的代碼:

現在代碼和圖算是徹底可以同步了。當我們在VS中修改代碼後,在EA中,選中相應的類,右鍵選擇|“代碼同步”,即可把代碼中修改的部分,同步到類圖中。

比如我們在代碼中添加一個address字段和屬性,并在建構函數和Print方法中添加内容:

address字段和屬性:

建構函數和Print方法:

然後在EA中,右鍵Human,選擇“代碼同步”,點選“是”:

讓工作更輕松——EA類圖與代碼同步
讓工作更輕松——EA類圖與代碼同步

再看看類的效果:

讓工作更輕松——EA類圖與代碼同步

已經成功的更新上去了。

當我們在修改類圖後,選擇修改後的類,再次生成代碼,即可更新原來的代碼。

現在我們在Human類中添加一個telphone及對應屬性:

讓工作更輕松——EA類圖與代碼同步

右鍵生成代碼後的源碼:

我們發現當初修改的構造函數和Print方法中的源碼部分,并沒有被删除。這說明,圖隻對代碼進行了更新,而不是覆寫操作。

示範就到這裡。

    通過剛才的示範,我們可以清楚的看到圖和代碼的同步,不再是那麼遙不可及。我們不用再為了改代碼而改圖了。可以節省大量的時間。

   =======================================================================================

   我在示範的時候是一個檔案,但是在實際項目中,肯定是用等多個檔案。有博友問我怎麼辦,我就再補充一下吧。

   拿我的一個小項目做實驗:包圖,類圖如下:

讓工作更輕松——EA類圖與代碼同步

   生成代碼時,如果你第一次生成源代碼,那麼可以在整個類視圖上右鍵,“代碼工程”->“生成源代碼”。這樣會為所有的圖生成。如果你在修改某個包中的類後,用圖去更新代碼時,你可以右鍵這個包,選擇“代碼工程”->“生成源代碼”,效果是一樣的。下面這幅圖是在類視圖上面生成代碼的截圖。

讓工作更輕松——EA類圖與代碼同步

   在對話框中的标題中,可以看出“根據包生成源碼”。這裡面也會帶有命名空間。在同步沖突中,選擇“同步模型和代碼”。然後勾選自動生成檔案,并選擇你的項目路徑(同單個檔案操作)。如果你的包圖中還有子包,那麼你需要勾選“包括所有子包的表”。生成即可。

讓工作更輕松——EA類圖與代碼同步
讓工作更輕松——EA類圖與代碼同步

這就是生成的效果了:

讓工作更輕松——EA類圖與代碼同步

   而用代碼更新類圖時,如果你想同步全部類圖,那麼在類視圖上右鍵,“代碼工程”->“導入源檔案目錄”。如果你隻想更新一個包,那麼在包上面右鍵,操作都是一樣的。我這裡選擇的是IDAL包(現在附加的這個項目使用VB.NET做的)。

   在“導入源碼”對話框中,選擇代碼所在的根目錄(這個在更新某個包的時候一定要看清楚了,否則就會把其他包的類導入到這個包中)。檔案類型選正确了。包結構選擇“為每個目錄生成包”,否則可能會出現你不想看到的效果。同步類型選擇“同步已存在的類”。如果你選擇的覆寫,那麼其他類與被更新的類之間的聯系都會被删除,而且在時序圖中被更新的類的對象,也會變為空白。是以一定要選擇同步。删除,根據實際情況而定吧。如果代碼中删除了某些類,那麼在更新類圖

時,會根據你的選擇,做出對應的操作。

讓工作更輕松——EA類圖與代碼同步

   好了,對于項目中多個檔案的操作,就說這麼多。紙上得來終覺淺,絕知此事要躬行,是以還是需要大家實際實驗一下才知道。

=======================================================================================

    當然,這個方案,隻是一個代碼和圖脫節的補救措施。最重要的還是在前期盡可能的設計好,在編碼時嚴格按照圖和文檔進行編碼,才不會出現那代碼與圖的脫節現象。

    回首一望,才發現,其實我們總是在有意無意的遵循着“簡單原理”,也正是由于“簡單原理”,我們的效率才會不斷的提高,我們才會不斷的進步。

繼續閱讀