package jdepend.knowledge.domainanalysis.impl; import java.util.ArrayList; import java.util.List; import jdepend.knowledge.domainanalysis.AbstractDomainAnalysis; import jdepend.knowledge.domainanalysis.AdviseInfo; import jdepend.knowledge.domainanalysis.StructureCategory; import jdepend.model.result.AnalysisResult; public final class InheritDomainAnalysis extends AbstractDomainAnalysis { /** * */ private static final long serialVersionUID = -3528310465287350860L; private final static String DAO = "DAO"; private final static String ALL = "ALL"; private int daoTreeMaxDeep = 4;// DAO继承树最大深度 private int allTreeMinDeep = 3;// 整个继承关系中的最小深度 public InheritDomainAnalysis() { super("继承关系领域分析器", "用于对继承树结构进行建议"); } protected AdviseInfo doAdvise(String name, AnalysisResult result) { if (name.equalsIgnoreCase(DAO)) { Integer[] treeData = createTreeData(result); int width = treeData[1]; int deep = treeData[2]; if (deep > daoTreeMaxDeep) { return new AdviseInfo("DAO继承树深度太大,1、建议通过抽取Util类提取公共代码来避免过深的继承树【优先使用组合而非继承】;2、DAO中可能涉及业务逻辑造成继承树较深,建议对DAO进行分析,移出业务逻辑。"); } } else if (name.equalsIgnoreCase(ALL)) { List<Integer[]> treeDatas = createTreeDatas(result); boolean isExistDeep = false; for (Integer[] treeData : treeDatas) { if (treeData[2] > allTreeMinDeep) { isExistDeep = true; break; } } if (!isExistDeep) { return new AdviseInfo("目标代码中整个继承树全部为浅层继承【继承深度小于4】,可能业务分析得不够,或结构过于简单,建议对复杂业务涉及的继承关系进行分析。"); } } return null; } private Integer[] createTreeData(AnalysisResult result) { Integer[] treeData = new Integer[0]; return treeData; } private List<Integer[]> createTreeDatas(AnalysisResult result) { List<Integer[]> treeDatas = new ArrayList<Integer[]>(); return treeDatas; } public int getDaoTreeMaxDeep() { return daoTreeMaxDeep; } public void setDaoTreeMaxDeep(int daoTreeMaxDeep) { this.daoTreeMaxDeep = daoTreeMaxDeep; } public int getAllTreeMinDeep() { return allTreeMinDeep; } public void setAllTreeMinDeep(int allTreeMinDeep) { this.allTreeMinDeep = allTreeMinDeep; } @Override public StructureCategory getStructureCategory() { return StructureCategory.Inherit; } }