原創|使用教程|編輯:吳園園|2020-04-01 15:18:30.930|閱讀 450 次
概述:如何輕松為Enterprise Architect創建項目特定的代碼生成器。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Enterprise Architect是一個對于軟件系統開發有著極好支持的CASE軟件(Computer Aided Software Engineering)。EA不同于普通的UML畫圖工具(如VISIO),它將支撐系統開發的全過程。在需求分析階段,系統分析與設計階段,系統開發 及部署等方面有著強大的支持,同時加上對10種編程語言的正反向工程,項目管理,文檔生成,數據建模等方面。可以讓系統開發中各個角色都獲得最好的開發效率。
每個模型元素生成一個以上的Artefact
讓我們通過使用兩種不同的持久性方法來實現一個產品線,使示例更加令人興奮:一種使用JPA將數據存儲在關系數據庫中,另一種使用HBase作為大數據存儲。
我建議實現一個可用于加載和保存實例的持久性管理器。只有基于JPA的產品才允許啟動和完成交易。此外,我想將JPA特定的注釋放在Java類中。圖3顯示了持久性管理器提供的方法。
圖3:處理圖1中的域類的PersistenceManager類的概述
現在的結果是,這兩種產品的所有六個類的實現都略有不同。在Java代碼清單5, 6, 7 和 8示出了代碼的摘錄來實現。
package com.example.orderingsoftware; public class Article extends AbstractIDObject { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }清單5:使用HBase作為持久性方法的Article類的Java代碼
package com.example.orderingsoftware; import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "ArticleTable") public class Article extends AbstractIDObject { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }清單6:使用JPA作為持久性方法的Article類的Java代碼
public class PersistenceManager implements AutoCloseable { private final Table articleTable; public static final byte[] MODEL_FAMILY = "Model".getBytes(); public static final TableName ARTICLE_TABLE_NAME = TableName.valueOf("ArticleTable"); public Article getArticle(UUID id) { try { if (id != null) { Get get = new Get(id.toString().getBytes()); if (articleTable.exists(get)) { Result r = articleTable.get(get); Article result = new Article(); result.setId(id); result.setName(Bytes.toString(r.getValue(MODEL_FAMILY, ARTICLE_NAME_QUALIFIER))); return result; } } return null; } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } } // ... }清單7:PersistenceManager類的Java代碼的一部分,其中使用HBase作為持久性方法
public class PersistenceManager implements AutoCloseable { private EntityManager entityManager; public Article getArticle(UUID id) { if (id != null) { return entityManager.find(Article.class, id); } else { return null; } } // ... }清單8:PersistenceManager類的Java代碼的摘錄,其中JPA作為持久性方法
實現該產品線的可行解決方案是:
我更喜歡最后一種解決方案。圖4中的概述顯示了清單1的重構的類模板。每個引入的方法都會生成Java類的特定成員。這使我可以在產品特定的模板中覆蓋這些方法。例如,在清單9中,可以看到JPA特定的注釋位于類定義之前。
圖4:重構類ClassTemplate的概述
class JPAClassTemplate extends ClassTemplate { @EACodegenFile def IFile path(Class element, IFile ^default) { val path = "com/example/orderingsoftware/" + ^default.name return getTargetFilePath("jpa", path) } @EACodegen("java") override generate(Class element) { return super.generate(element) } override printClassDeclaration(Class element) ''' ?IF element.isAbstract? @MappedSuperclass ?ELSE? @Entity @Table(name = "?element.name?Table") ?ENDIF? ?super.printClassDeclaration(element)?''' // ... }清單9:用Xtend編寫的JPA的代碼生成模板的摘錄
path(Class, IFile)帶有注釋的模板子類中的方法@EACodegenFile用于定義應保存生成的代碼的目標位置。它有兩個參數。第一個是應為其生成代碼的UML元素。第二個是應將生成的代碼存儲在默認位置。帶注釋的方法的返回值是調整后的位置,應在該位置存儲生成的代碼。
圖5中的屏幕快照顯示了所有模板。箭頭指向它們各自生成的文件。除了生產代碼外,還會生成測試代碼。
結論
現代通用編程語言(例如Xtend)非常適合實現復雜的代碼生成器。輸入可能是UML模型,可能是在Enterprise Architect中建模的。YAKINDU EA-Bridge可以將Enterprise Architect模型背后的關系數據庫即時轉換為UML元模型的實例,并且將其完全隱藏。無需學習Enterprise Architect提供的專有代碼生成語言或對Enterprise Architect的數據庫架構進行反向工程。
YAKINDU EA-Bridge的Eclipse IDE集成使人們可以在短時間內以低成本實現特定于項目的代碼生成器。這樣,您可以節省許多繁瑣,容易出錯和無意識的實施工作。
如果您想親自查看并運行完整的示例,請嘗試使用YAKINDU EA-Bridge。所提供的示例是YAKINDU EA-Bridge附帶的示例之一。
=====================================================
想要了解或購買Enterprise Architect正版版權,請
關注下方微信公眾號,及時獲取產品最新消息和最新資訊
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: