左思右想了很久,還是覺得該把工作時碰到的問題做個紀錄。原本一直在思考這類的文章到底該放在Pixnet還是Wordpress,因為Pixnet先前都是放個人思緒相關為主,因此才另開Wordpress想放技術型文件。但考慮到Pixnet的觸及率比較高....(苦惱)

 

因為首次多人共享專案的關係,在工作上接觸到了Packed Project Library (PPL)來進行版本控管與基礎資源的共享,大家先前的習慣都不太好,一隻程式會有ABCD版,然後A版可能新增了功能1、功能2,B版新增了功能2、功能3,C版是從B版改良再加入功能4,然後D版只具備功能5的這種混亂情況。然後更麻煩的是ABCD四種版本分別在不同人的電腦裡,大家都是因為需要而做出的改版,但從來沒有好好整合過。(寫出來又覺得更混亂了....)

在不斷地溝通之下,一個可以觀看但不能修改的重要因子---PPL就誕生了。但是又需要配合不同需求的改版問題,所以PPL+Class就出現在我們的腦海中了。

但本團隊先前沒有開發過Class的相關技術,過往習慣直接開發VI,沒有Project這回事,所以更別提PPL了...,因此就出現了勇者(我)來替大家披荊斬棘、勇闖先鋒。

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

這次主要問題是PPL(lvlibp)互相引用的時候會造成引用衝突(Reference Conflict)

如此開啟時,原始的Class_A與Project_B.class/Project_A.lvlibp/Class_A.lvclass便會出現衝突。

(Labview的版本相容與路徑認知實在是令人非常頭痛....)

 

但是在架構已經確認無法避免的情況下,又不想大量更動主架構,

個人想出的解決辦法是先創造Class_A_Mother 和 Class_B_Mother之虛擬層。

其中Mother只是擁有空Method的虛擬層,其Private Data並不做任何的定義,

所有的Class會長這樣,變成四個Class(如下圖)

如此一來,在Project_A中僅會呼叫到虛擬層Class_B_Mother,就不會有重複的Class_A,

所有的Method已經事先在虛擬層定義好了,真正的內容則寫在Class_A和Class_B中,再透過繼承與複寫(Override)去執行真正的內容。

總而言之,就是先創造一個沒有引用衝突的空層,再利用繼承寫入原本會有引用衝突的內容。

如此的缺點是會多增加一個PPL檔(lvlibp),且增加繼承樹的複雜度,

但以不更動主架構的方法來說,似乎是個不錯的辦法。

====

現在還碰到另一個問題就是輸出PPL的時候會連引用到的PPL都一起輸出,這不打緊,但不能把引用路徑指回原本的PPL位置,也不能直接輸出覆蓋原本引用的PPL。。。

這個問題等我解決之後會再發文吧...(如果有解的話啦...)

 

※以上內容為個人心得,若有錯誤或疑問請用力鞭打。

※作者為Labview菜鳥一枚,請多包涵。

創作者介紹
創作者 -悄悄的流浪- -是我的幸福- 的頭像
Vincent

-悄悄的流浪- -是我的幸福-

Vincent 發表在 痞客邦 留言(0) 人氣( 412 )