左思右想了很久,還是覺得該把工作時碰到的問題做個紀錄。原本一直在思考這類的文章到底該放在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菜鳥一枚,請多包涵。
請先 登入 以發表留言。