企业架构师——找到原型所有元素的最快方法

本文关键字:元素 方法 原型 企业 | 更新日期: 2023-09-27 18:18:53

我们使用c#中的方法来确定原型的所有元素,但是这非常慢:

    public List<EA.Element> findElementsByStereotype(string stereotype){
        List<EA.Element> result = new List<EA.Element>();
        String xmlQueryResult = repository.SQLQuery(
                                        "select obj1.object_id " +
                                        "from t_object obj1 " +
                                        "where obj1.stereotype = '" + stereotype + "';");
        XmlDocument xml = Tools.XMLUtil.convertStringToXMLDocument(xmlQueryResult);
        XmlNodeList xnList = xml.SelectNodes("/EADATA/Dataset_0/Data/Row");
        foreach (XmlNode xn in xnList){
            result.Add(repository.GetElementByID(Convert.ToInt32(xn.InnerText)));
        }
        return result;
    }

你知道一个更高效的解决方案吗?

企业架构师——找到原型所有元素的最快方法

如果您想要更快,XML永远不是您的朋友。幸运的是,EA API提供了一种不同的方式来检索一组元素:Repository.GetElementSet(),它从逗号分隔的元素id列表或SQL查询中返回EA.ElementEA.Collection

public List<EA.Element> findElementsByStereotype(string stereotype) {
    List<EA.Element> result = new List<EA.Element>();
    foreach (EA.Element element in repository.GetElementSet("select Object_ID " +
             "from t_object where Stereotype='" + stereotype + "'", 2)) {
        result.Add(element);
    }
    return result;
}

请注意,我还没有验证这运行更快。我假设它会,但是GetElementSet()有可能在本质上做与您在底层所做的相同的XML解析。但如果没有别的,它更短了。